1

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

返回值

类型:System.Boolean

如果关联进程已达到空闲状态,则为true 。

如果让我感到困惑,是否只有从具有等待参数的 for 方法的重载版本复制/粘贴的文档,或者我不理解某些东西?

更新

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

4

3 回答 3

4

我认为这可能是操作系统兼容性问题。不确定,我不再有适用于 Windows 98 的可靠文档。关键问题是它调用本机 winapi WaitForInputIdle() 函数,传递 int.MaxValue (0x7ffffffff) 而不是 INFINITE (-1)。所以这个调用实际上可以在 24.85 天后超时。

这个限制出现在不止一个地方,System.Windows.Automation.Provider.WaitForInputIdle(int) 方法也指定了一个最大值为 int.MaxValue。

所以是的,如果你弄错了,那么你的程序已经休眠了 25 天。是时候结束了:)

于 2012-05-22T23:05:50.823 回答
2

WaitForInputIdle()简单地调用WaitForInputIdle(int milliseconds),然后调用WaitForInputIdle在 User32.dll 中实现的本机。如果由于超时间隔已过而终止等待,则后者返回,这会导致 .NET 实现返回。WAIT_TIMEOUTfalse

编辑: WaitForInputIdle()将 0x7fffffff 传递给WaitForInputIdle(int milliseconds),这INFINITE 不同(在 WinBase.h 中定义为 0xffffffff)。因此,如果一个进程在大约 25 天内没有进入空闲状态,那么WaitForInputIdle() 返回 false。

于 2012-05-22T22:41:53.563 回答
0

如果您提供非过载,您将无限期地等待,直到它变得空闲。

如果你提供Process.WaitForInputIdle(0)你基本上是在测试空闲的过程。

如果您提供Process.WaitForInputIdle(-1)与非重载版本相同的内容。

在 UI 启动期间,有很多消息进来。如果您在测试应用程序中覆盖 WndProc,您可以看到它们流过。

编辑:看到你编辑的问题。

如果您指定 WaitForInputIdle(0 或非无限超时)(即测试)并且应用程序在该时间内没有空闲,那么您将得到一个错误的 afaik。

于 2012-05-22T22:40:19.820 回答