Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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# WPF应用程序,显示正在运行的进程的有效方法_C#_Wpf_Process - Fatal编程技术网

C# WPF应用程序,显示正在运行的进程的有效方法

C# WPF应用程序,显示正在运行的进程的有效方法,c#,wpf,process,C#,Wpf,Process,我目前正在开发一个WPF应用程序,它显示与一组正在运行的进程相关的各种统计信息。我使用Process.GetProcesses()方法来获取正在运行的进程,并根据特定条件筛选出一组我想要编辑的进程。每个进程在我的WPF UI中形成一个选项卡。目前,我将它们放在一个绑定到选项卡控件的ObservableCollection中。现在,符合我的条件的进程可能随时出现并退出,我希望UI相应地刷新。目前,我每隔几秒钟轮询一次当前的进程集,以确定是否有新的进程出现或正在运行的进程退出,以便UI相应地反映更改

我目前正在开发一个WPF应用程序,它显示与一组正在运行的进程相关的各种统计信息。我使用
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();
        }
    }
}