我在 C# 中构建了一个项目,在某些时候必须听其他文件的打开和关闭。我使用的代码实际上可以工作,但不知何故,每次我运行我的项目“WMI Provider Host”都会因 CPU 使用而发疯。第一次运行它会达到 50% 的使用率,每次我重新启动我的项目时,它都会上升 10%,直到达到 100%。我不确定我的代码是否做错了什么。
我尝试将该函数放入一个新的干净文件中,只是为了找出相同的结果。
这是它的样子:
using System;
using System.Threading;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
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();
}
}
}
}
我不确定为什么这会干扰 WMI 的 CPU 使用率。
唯一添加的参考是“系统管理”。
这里有任何人有任何建议或知道为什么会这样吗?谢谢!