当前位置:  开发笔记 > 编程语言 > 正文

System.Diagnostics.Process.Start奇怪的行为

如何解决《System.Diagnostics.Process.Start奇怪的行为》经验,为你挑选了1个好方法。

我正在编写一个应用程序来启动和监视C#中的其他应用程序.我正在使用System.Diagnostics.Process类来启动应用程序,然后使用Process.Responding属性监视应用程序,以每100毫秒轮询一次应用程序的状态.我使用Process.CloseMainWindow来停止应用程序或Process.Kill如果它没有响应就杀死它.

我注意到一种奇怪的行为,有时进程对象进入一种状态,即当底层进程在循环中挂起并且它不响应CloseMainWindow时,响应属性总是返回true.

重现它的一种方法是在启动流程实例后立即轮询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毫秒总是足够的.



1> Rob Cooper..:

现在,我需要稍后检查一下,但我确信有一个方法告诉线程等待它准备输入.您是否仅监控GUI流程?

是不是Process.WaitForInputIdle对你有任何帮助?或者我错过了这一点?:)

更新

在Twitter(或推文推文?)与门德尔聊天之后,我想我应该更新我的答案,以便社区充分了解..

WaitForInputIdle 仅适用于具有GUI的应用程序.

您指定等待的时间,如果进程在该时间范围内达到空闲状态,则该方法返回bool,显然,如果需要,您可以使用它循环,或者根据需要进行处理.

希望有帮助:)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有