当进程停止响应时收到通知(最好是C#)

当进程停止响应时收到通知(最好是C#),c#,windows,process-monitoring,C#,Windows,Process Monitoring,我想知道是否有一种方法可以监听某个事件,以便在某个特定进程没有响应(而不是退出时!)时收到通知 此解决方案允许检查某个进程是否响应,但此解决方案只能用于轮询:。如果我能在这个解决方案中“倾听”process.Responding,那就太好了 例如,我想监听windows计算机上的所有Visual Studio进程,如果其中任何进程没有响应,那么我希望得到通知,以便我可以相应地采取行动。非常感谢 像这样的事情可能会奏效。这是一个简单的示例,它使用任务轮询Process.Responding并在返回

我想知道是否有一种方法可以监听某个事件,以便在某个特定进程没有响应(而不是退出时!)时收到通知

此解决方案允许检查某个进程是否响应,但此解决方案只能用于轮询:。如果我能在这个解决方案中“倾听”process.Responding,那就太好了


例如,我想监听windows计算机上的所有Visual Studio进程,如果其中任何进程没有响应,那么我希望得到通知,以便我可以相应地采取行动。非常感谢

像这样的事情可能会奏效。这是一个简单的示例,它使用任务轮询
Process.Responding
并在返回false时触发事件。我不认为你能够周期性地对流程进行轮询,至少不能以简单/简洁的方式进行轮询

每个
任务
将在后台线程中运行,以便在监视每个进程时不会挂起主线程

使用System.Threading.Tasks;
名称空间系统诊断
{
公共类ProcessEventArgs:EventArgs
{
公共进程进程{get;protected set;}
公共ProcessEventArgs(进程)
{
这个过程=过程;
}
}
公共委托void ProcessNotRespondingEvent(对象发送方,ProcessEventArgs e);
公共类进程监视器
{
公共事件处理未响应事件未响应;
保护过程;
公共进程监视器(进程进程)
{
this.mpprocess=进程;
}
公共异步void Start()
{
任务t=null;
t=Task.Run(()=>
{
while(this.mProcess.Responding)
t、 等待(1000);//1秒
这个.OnNotResponding();
} );
等待t;
}
受保护的void OnNotResponding()
{
if(this.NotResponding==null)
返回;
ProcessEventArgs e=新的ProcessEventArgs(this.mpProcess);
本。无响应(本,e);
}
}
}
示例用法

使用System.Linq;
内部静态类程序
{
私有静态void Main()
{
var processs=Process.GetProcessesByName(“devenv”);
变量监视器=进程。选择(p=>{
var监视器=新的进程监视器(p);
monitor.NotResponding+=(s,e)=>{
WriteLine(“进程{0}(pid:{1})已停止响应。”,e.Process.ProcessName,e.Process.Id);
};
返回监视器;
} );
foreach(监视器中的var监视器)
monitor.Start();
}
}

监听实际上与轮询相反,您需要应用程序在某个时间段发送信号,如果没有响应,您的侦听器会将其标记为没有响应。。。嗯?请看制作一个周期性发送信号或心跳(等)的应用程序仍在轮询。我正在寻找一种纯粹以事件为导向的方式,因为它将是一个实时应用程序,我无法承受连续几天每秒5次的投票我想知道Windows是否提供了这样的服务(在谷歌上找不到任何东西)没有通知。有一个由Microsoft escalation工程师编写的演示技术的演示。他使用SendMessageTimeout()进行民意测验,这是一种常见的技术。IsHungAppWindow()值得注意,但它附带了一个到期通知。