WaitHandle.WaitAny メソッド (WaitHandle[], Int32)
2013/03/11
32 ビット符号付き整数を使用して時間間隔を指定し、指定した配列内のいずれかの要素がシグナルを受信するまで待機します。
アセンブリ: mscorlib (mscorlib.dll 内)
パラメーター
- waitHandles
- 型:
System.Threading.WaitHandle
[]
現在のインスタンスが待機する対象のオブジェクトを格納している配列。
- millisecondsTimeout
- 型: System.Int32
待機するミリ秒数。無制限に待機する場合は Timeout.Infinite (-1)。
戻り値
型: System.Int32待機を実行したオブジェクトの配列インデックス。つまり、待機を実行したオブジェクトがない場合や millisecondsTimeout で渡された時間間隔と等しい場合は WaitTimeout となります。
| 例外 | 条件 |
|---|---|
| ArgumentNullException | waitHandles パラメーターが null です。 または waitHandles 配列内の 1 つ以上のオブジェクトが null です。 |
| NotSupportedException | waitHandles 内のオブジェクト数がシステムによって許可されている数を超えています。 |
| ArgumentOutOfRangeException | millisecondsTimeout が -1 以外の負数です。-1 は無制限のタイムアウトを表します。 |
| ArgumentException | waitHandles が要素のない配列です。 |
millisecondsTimeout が 0 の場合、このメソッドではブロックが行われません。待機ハンドルの状態をテストして、すぐに制御を戻します。
このメソッドは、待機が終了するとき、ハンドルのいずれかがシグナル状態になるとき、またはタイムアウトが発生するときに制御を返します。複数のオブジェクトが呼び出し中にシグナル状態になった場合、戻り値はすべてのシグナル状態オブジェクトのうち、最小インデックス値を持つシグナル状態オブジェクトの配列インデックスになります。一部の実装では、64 個を超えるハンドルが渡されると、NotSupportedException がスローされます。
この WaitAny メソッドのオーバーロードを使用して、複数のスレッドの完了を待機する間に進行状況を報告する方法を、次の例に示します。WaitAny メソッドがタイムアウトするたびに、待機していたスレッドがユーザー インターフェイス スレッドに進行状況を報告します。
このコードは、WaitHandle クラスのトピックで取り上げているコード例の一部分です。
// Wait for ANY subtask to complete, and show progress. // Create an array of ManualResetEvent wait handles. Each subtask will // signal its ManualResetEvent when it is finished. WaitHandle[] waitHandles = finished.ToArray(); int index = WaitHandle.WaitTimeout; while (index == WaitHandle.WaitTimeout) { // Wait for any WaitHandle to be signaled. Use a timeout of 250 milliseconds // to send progress reports. If a timeout occurs, WaitTimeout is returned; // if a WaitHandle signals, the array index of the WaitHandle is returned. // index = WaitHandle.WaitAny(waitHandles, 250); worker.ReportProgress(1); }