我正在编写一个应用程序来启动和监视 C# 中的其他应用程序。我正在使用 System.Diagnostics.Process 类来启动应用程序,然后使用 Process.Responding 属性监视应用程序,以每 100 毫秒轮询一次应用程序的状态。如果应用程序没有响应,我使用 Process.CloseMainWindow 来停止应用程序或 Process.Kill 来杀死它。
我注意到一个奇怪的行为,有时进程对象进入响应属性始终返回 true 的状态,即使底层进程挂在循环中并且它不响应 CloseMainWindow。
重现它的一种方法是在启动流程实例后立即轮询 Responding 属性。所以例如
_process.Start();
bool responding = _process.Responding;
将重现错误状态,同时
_process.Start();
Thread.Sleep(1000);
bool responding = _process.Responding;
将工作。将睡眠周期减少到 500 将再次引入错误状态。
启动后调用 _process.Responding 太快似乎会阻止对象获取正确的 Windows 消息队列处理程序。我想我需要等待 _process.Start 完成它的异步工作。有没有比调用 Thread.Sleep 更好的方法来等待这个?我不太相信 1000 毫秒就足够了。