Process.WaitForInputIdle()可以返回false吗?

时间:2012-05-22 22:30:40

标签: .net

我无法看到Process.WaitForInputIdle()如何返回除true之外的任何内容或抛出异常,但在documentation中声明了该方法:

  

返回值

     

类型:System.Boolean

     

true if 关联进程已达到空闲状态。

如果让我感到困惑的话,那就是只有来自overloaded version的文档的文档复制/粘贴有等待参数的方法,或者我不了解某些内容?

更新

为了澄清我的问题,我知道Process.WaitForInputIdle()是如何工作的,如果在某些情况下它可以返回false,那就很好了。

3 个答案:

答案 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。