我有一些这样的代码:
process.CloseMainWindow();
if (!process.WaitForExit(5000)) { process.Kill(); }这个想法是让进程优雅地退出,但如果花费的时间超过5秒,我认为它需要被终止。
这似乎在大多数情况下都是有效的,但是如果进程抛出了一条windows错误消息,它就会挂起。我之前只有一个"process.Kill()“,而且它是有效的,所以我不得不假设它实际上被WaitForExit(5000)调用卡住了,即使我给了它一个超时值。
会发生这种情况的原因是什么?
编辑:我想知道是不是因为那个错误消息,CloseMainWindow()实际上挂起了。在这种情况下,在尝试CloseMainWindow()方法之前检查进程的"responding“属性实际上会返回"false”吗?如果是这样,我可以检查它,然后使用Kill,如果是这样的话。
发布于 2016-04-15 04:15:51
首先,我要感谢Marc不厌其烦地这么做,我从来没有想过我可以用这种方式重现这个错误。
无论如何,在更仔细地阅读了CloseMainWindow()的帮助文件后,我看到了以下内容:
Return Value
Type: System.Boolean
true if the close message was successfully sent; false if the associated
process does not have a main window or if the main window is disabled (for
example if a modal dialog is being shown).就在那里,它显示了一个模式对话框(比如我看到的错误),这将导致一个问题。现在我不确定为什么它不会在超时后失败,然后在超时后被终止,但我认为在这种情况下,我可以使用这个返回值来终止进程。
https://stackoverflow.com/questions/36631722
复制相似问题