C# WPF应用程序,显示正在运行的进程的有效方法
我目前正在开发一个WPF应用程序,它显示与一组正在运行的进程相关的各种统计信息。我使用C# WPF应用程序,显示正在运行的进程的有效方法,c#,wpf,process,C#,Wpf,Process,我目前正在开发一个WPF应用程序,它显示与一组正在运行的进程相关的各种统计信息。我使用Process.GetProcesses()方法来获取正在运行的进程,并根据特定条件筛选出一组我想要编辑的进程。每个进程在我的WPF UI中形成一个选项卡。目前,我将它们放在一个绑定到选项卡控件的ObservableCollection中。现在,符合我的条件的进程可能随时出现并退出,我希望UI相应地刷新。目前,我每隔几秒钟轮询一次当前的进程集,以确定是否有新的进程出现或正在运行的进程退出,以便UI相应地反映更改
Process.GetProcesses()
方法来获取正在运行的进程,并根据特定条件筛选出一组我想要编辑的进程。每个进程在我的WPF UI中形成一个选项卡。目前,我将它们放在一个绑定到选项卡控件的ObservableCollection
中。现在,符合我的条件的进程可能随时出现并退出,我希望UI相应地刷新。目前,我每隔几秒钟轮询一次当前的进程集,以确定是否有新的进程出现或正在运行的进程退出,以便UI相应地反映更改,但这似乎远远不够理想。
有更好的方法吗?实现此功能的最佳方法是什么?您可以使用:
using System;
using System.Management;
namespace ProcessListener
{
class Program
{
static void Main(string[] args)
{
ManagementEventWatcher psStartEvt = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStartTrace");
ManagementEventWatcher psStopEvt = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStopTrace");
psStartEvt.EventArrived += (s, e) =>
{
string name = e.NewEvent.Properties["ProcessName"].Value.ToString();
string id = e.NewEvent.Properties["ProcessID"].Value.ToString();
Console.WriteLine("Started: {0} ({1})", name, id);
};
psStopEvt.EventArrived += (s, e) =>
{
string name = e.NewEvent.Properties["ProcessName"].Value.ToString();
string id = e.NewEvent.Properties["ProcessID"].Value.ToString();
Console.WriteLine("Stopped: {0} ({1})", name, id);
};
psStartEvt.Start();
psStopEvt.Start();
Console.ReadLine();
}
}
}