1

Process.WaitForInputIdle()がtrue以外のものを返すか、例外をスローする方法がわかりませんが、そのメソッドのドキュメントには次のように記載されています。

戻り値

タイプ:System.Boolean

関連するプロセスがアイドル状態に達した場合はtrue 。

それは私を混乱させる場合、待機パラメータを持つメソッドのオーバーロードされたバージョンからのドキュメントのコピー/貼り付けだけですか、それとも私は何かを理解していませんか?

アップデート

私の質問を明確にするために、Process.WaitForInputIdle()がどのように機能するかを知っていますが、条件によってはfalseを返す可能性があるかどうかだけが気になります。

4

3 に答える 3

4

これはオペレーティングシステムの互換性の問題かもしれないと思います。よくわかりませんが、Windows98用の信頼できるドキュメントはもうありません。重要な問題は、ネイティブのwinapi WaitForInputIdle()関数をピンボークし、INFINITE(-1)の代わりにint.MaxValue(0x7ffffffff)を渡すことです。したがって、この通話は24。85日後に実際にタイムアウトになる可能性があります。

この制限は複数の場所で発生します。System.Windows.Automation.Provider.WaitForInputIdle(int)メソッドもint.MaxValueの最大値を指定します。

そうです、あなたがfalseになった場合、あなたのプログラムは25日間眠っています。それを呼び出す時間は終了します:)

于 2012-05-22T23:05:50.823 に答える
2

WaitForInputIdle()を呼び出すだけで、User32.dllに実装されてWaitForInputIdle(int milliseconds)いるネイティブが呼び出されます。後者は、タイムアウト間隔が経過したために待機が終了した場合に返されます。これにより、.NET実装は。を返します。WaitForInputIdleWAIT_TIMEOUTfalse

編集: WaitForInputIdle() 0x7fffffffをWaitForInputIdle(int milliseconds)に渡します。これはINFINITE(WinBase.hで0xffffffffとして定義されています)と同じではありません。したがって、プロセスが約25日以内にアイドル状態にならない場合、falseWaitForInputIdle() を返します。

于 2012-05-22T22:41:53.563 に答える
0

非過負荷を提供すると、アイドル状態になるまで無期限に待機します。

あなたが供給する場合、Process.WaitForInputIdle(0)あなたは基本的にアイドルのためにプロセスをテストしています。

あなたがそれを提供Process.WaitForInputIdle(-1)するならば、それは非過負荷バージョンと同じです。

UIの起動中に、たくさんのメッセージが届きます。テストアプリでWndProcをオーバーライドすると、メッセージが流れるのを確認できます。

編集:あなたが質問を編集したように見えます。

WaitForInputIdle(0または非無限タイムアウト)(つまりテスト)を指定し、その時間内にアプリがアイドル状態になっていない場合、誤ったafaikが発生します。

于 2012-05-22T22:40:19.820 に答える