Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#之后做一些动作,保持活动状态,以捕捉流程的开始和结束_C#_Visual Studio - Fatal编程技术网

C#之后做一些动作,保持活动状态,以捕捉流程的开始和结束

C#之后做一些动作,保持活动状态,以捕捉流程的开始和结束,c#,visual-studio,C#,Visual Studio,我已经编写了一个C#控制台应用程序,它执行一些操作,之后我需要保持它的活动状态,以捕获辅助程序的启动和关闭 设置应如下所示: 运行一次 行动1 行动2 行动3 保持循环 如果进程x.exe正在运行>执行操作 如果进程x.exe未运行>执行操作 循环应该是无止境的。每次启动或停止进程x.exe时,它都应该反复执行该操作 我不确定该怎么做 使用While循环会杀死CPU,因此这不是正确的做法 提前谢谢。请看一下。它允许您订阅临时事件通知,如进程启动 string startEventName =

我已经编写了一个C#控制台应用程序,它执行一些操作,之后我需要保持它的活动状态,以捕获辅助程序的启动和关闭

设置应如下所示:


运行一次

行动1

行动2

行动3

保持循环

如果进程x.exe正在运行>执行操作

如果进程x.exe未运行>执行操作


循环应该是无止境的。每次启动或停止进程x.exe时,它都应该反复执行该操作

我不确定该怎么做


使用While循环会杀死CPU,因此这不是正确的做法

提前谢谢。

请看一下。它允许您订阅临时事件通知,如进程启动

string startEventName = "InstanceCreationEvent";
string stopEventName = "InstanceDeletionEvent";
string processName = "notepad.exe";

ListenForProcess(processName, startEventName, (sender, e) =>
{
    Console.WriteLine("Process Started");
});

ListenForProcess(processName, stopEventName, (sender, e) =>
{
    Console.WriteLine("Process Stopped");
});
此功能将侦听以下事件:

static void ListenForProcess(string processName,
    string eventName, EventArrivedEventHandler eventHandler)
{
    string queryString =
        $@"SELECT TargetInstance
        FROM __{eventName}
        WITHIN 0.1
        WHERE TargetInstance ISA 'Win32_Process'
        AND TargetInstance.Name='{processName}'";

    using (var watcher = new ManagementEventWatcher(queryString))
    {
        watcher.EventArrived += eventHandler;
        watcher.Start();

        new Thread(() =>
        {
            while (true)
            {
                watcher.WaitForNextEvent();
            }
        }).Start();
    }
}

“使用While循环会杀死CPU”。。。谁告诉你的?我的任务管理器以15%的CPU运行应用程序。这正是我需要的!不过有一件事。每当我在文件中运行此命令时,名为“WMI提供程序主机”(WmiPrvSE.exe)的文件将开始使用大量CPU。我说的是我i7的50/60%。如果我关闭我的应用程序并再次运行它,它会更高,直到达到100%。在我的电脑中,它需要0%的CPU。尝试创建新项目并仅粘贴此代码。然后您可以检查资源使用情况。