待機ハンドル

更新 : 2007 年 11 月

WaitHandle クラスは、Win32 同期ハンドルをカプセル化し、複数の待機操作を実行できる、ランタイムのすべての同期オブジェクトを表すために使用します。待機ハンドルと他の同期オブジェクトの比較については、「同期プリミティブの概要」を参照してください。

WaitHandle クラス自体は抽象クラスです。派生クラスに加え、このクラスには、複数イベントの待機を有効にする静的メソッドがいくつかあります。WaitHandle の派生クラスは次のとおりです。

WaitHandleMarshalByRefObject の派生クラスであるため、アプリケーション ドメインの境界を越えてスレッドの動作を同期するために使用できます。

スレッドは、WaitOne インスタンス メソッドを呼び出して個々の待機ハンドルでブロックできます。さらに、WaitHandle クラスには、指定したすべての待機ハンドルのセットが通知を受けるまで待機するためのオーバーロードされた静的メソッド (WaitAll)、または指定したいずれかの待機ハンドルのセットが通知を受けるまで待機するためのオーバーロードされた静的メソッド (WaitAny) があります。これらのメソッドのオーバーロードは、待機を放棄するためのタイムアウト間隔と、待機状態に入る前に同期のコンテキストを終了する機会を提供して、他のスレッドが同期のコンテキストを使用できるようにします。

.NET Framework Version 2.0 の待機ハンドルには、静的な SignalAndWait メソッドもあります。このメソッドを使用すると、分割不可能な 1 回の操作でスレッドが 1 つの待機ハンドルに通知し、すぐに別の待機ハンドルを待機できます。

WaitHandle の派生クラスは、スレッド アフィニティが異なります。イベント待機ハンドル (EventWaitHandleAutoResetEvent、および ManualResetEvent) とセマフォには、スレッド アフィニティはありません。スレッドはいずれもイベント待機ハンドルやセマフォに通知できます。他方、ミューテックスには、スレッド アフィニティがあります。ミューテックスを所有するスレッドはミューテックスを解放する必要があり、所有していないミューテックスで ReleaseMutex メソッドを呼び出した場合は、例外がスローされます。

参照

概念

ミューテックス

セマフォ

その他の技術情報

マネージ スレッド処理

スレッド処理オブジェクトと機能

EventWaitHandle、AutoResetEvent、および ManualResetEvent