2012-05-22 91 views
1

我看不到Process.WaitForInputIdle如何()可以返回任何东西,但真或抛出一个异常,但在documentation该法规定:可以Process.WaitForInputIdle()返回false?

返回值

类型:System。布尔型

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

那如果让我困惑,是只有文件从overloaded version复制/粘贴等等参数的方法还是我不理解的东西?

UPDATE

为了澄清我的问题,我知道Process.WaitForInputIdle()是如何工作的,只是courious如果可以回到在某些情况下错误的。

回答

4

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

此限制出现在多个位置,System.Windows.Automation.Provider.WaitForInputIdle(int)方法还指定int.MaxValue的最大值。

所以是的,如果你得到错误,那么你的程序已经睡了25天。时间叫它退出:)

0

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

如果您提供Process.WaitForInputIdle(0)您基本上正在测试闲置的过程。

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

在UI启动过程中会有很多消息进来。如果您在测试应用程序中覆盖WndProc,您可以看到它们流过。编辑: 看到你编辑的问题。

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

2

WaitForInputIdle()只需调用WaitForInputIdle(int milliseconds),后者又调用在User32.dll中实现的本机WaitForInputIdleThe latter返回WAIT_TIMEOUT如果等待因超时间隔过去而终止,这会导致.NET实现返回false

编辑:WaitForInputIdle()通行证向为0x7FFFFFFF WaitForInputIdle(int milliseconds),这是不一样无穷大(在WINBASE.H定义为0xFFFFFFFF的)。因此如果一个进程在大约25天内没有进入空闲状态,那么WaitForInputIdle()返回false。

+0

而且在Process.WaitForInputIdle()的情况下,自从INFINITE参数被使用后,超时间隔无法流逝,对吧? –

+0

@AntonioBakula:我更新了答案。 –