我无法看到Process.WaitForInputIdle()如何返回除true之外的任何内容或抛出异常,但在documentation中声明了该方法:
返回值
类型:System.Boolean
true if 关联进程已达到空闲状态。
如果让我感到困惑的话,那就是只有来自overloaded version的文档的文档复制/粘贴有等待参数的方法,或者我不了解某些内容?
更新
为了澄清我的问题,我知道Process.WaitForInputIdle()是如何工作的,如果在某些情况下它可以返回false,那就很好了。
答案 0 :(得分:4)
我认为这可能是操作系统兼容性问题。不确定,我没有适用于Windows 98的可靠文档。关键问题在于它将本地winapi WaitForInputIdle() function括起来,传递int.MaxValue(0x7ffffffff)而不是INFINITE(-1)。所以这个电话实际上可以在24.85天之后超时。
此限制出现在多个位置,System.Windows.Automation.Provider.WaitForInputIdle(int)方法还指定了int.MaxValue的最大值。
所以是的,如果你弄错了,那么你的程序已经睡了25天了。是时候叫它退出了:)
答案 1 :(得分:2)
WaitForInputIdle()
只需调用WaitForInputIdle(int milliseconds)
,然后调用User32.dll中实现的原生WaitForInputIdle
。如果由于超时间隔过去而终止等待,The latter将返回WAIT_TIMEOUT
,这会导致.NET实现返回false
。
编辑: WaitForInputIdle()
将0x7fffffff传递给WaitForInputIdle(int milliseconds)
, 与INFINITE相同(在WinBase.h中定义为0xffffffff)。因此,如果进程在大约25天内未进入空闲状态,则WaitForInputIdle()
将返回false。
答案 2 :(得分:0)
如果您提供非过载,您将无限期地等待,直到它变为空闲状态。
如果您提供Process.WaitForInputIdle(0)
,您基本上正在测试该过程是否空闲。
如果您提供的Process.WaitForInputIdle(-1)
与非重载版本相同。
在UI启动期间,会有很多消息进入。如果您在测试应用中覆盖WndProc,您可以看到它们流过。
编辑: 看到你编辑了问题。
如果您指定WaitForInputIdle(0或非无限超时)(即测试)并且该应用程序在该时间内没有空闲,那么您将获得虚假的afaik。