2012-05-22 131 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:我更新了答案。 –