检查进程列表是否 运行 的正确方法

Correct approach to check if a list of processes are running

我正在使用 C# 编写一个应用程序,供用户记录他们使用程序的时间。他们可以选择进程并将它们存储在数据库中。

该应用程序当前使用计时器以 5 秒为间隔循环遍历设备上的每个 运行 进程,使用 Diagnostics.Process.GetProcesses() 并根据数据库中的名称检查此名称列表。

这是解决此问题的合理方法吗?或者为数据库中的每个进程创建一个线程来侦听它以开始使用 Win32Process.ProcessInfo.StartedEventHandler()?

会更好吗?

任何时候你都可以避免轮询,你应该。

启动时,您需要枚举进程以获取当前系统状态。在此之后,您可以使用 WMI 监视进程创建: Is there a System event when processes are created?。您甚至可以修改该查询以仅包含您关心的进程。

每当您获得匹配(启动时或 WMI 事件)时,使用 Diagnostics.process.GetProcesses() 调用,并将事件处理程序附加到 Process.Exeted 事件:https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.exited?view=net-5.0 到知道什么时候关门。