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