オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。
Overloads Public Shared Function Wait( _
ByVal obj As Object _) As Boolean
[C#]
public static bool Wait(objectobj);
[C++]
public: static bool Wait(Object* obj);
[JScript]
public static function Wait(
obj : Object) : Boolean;
パラメータ
- obj
待機を行うオブジェクト。
戻り値
呼び出し元が、指定したオブジェクトのロックを再取得したために呼び出しが返された場合は true 。このメソッドは、ロックが再取得されないと制御を戻しません。
例外
| 例外の種類 | 条件 |
|---|---|
| ArgumentNullException | obj パラメータが null 参照 (Visual Basic では Nothing) です。 |
| SynchronizationLockException | 呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。 |
| ThreadInterruptedException | Wait を呼び出したスレッドは、後で待機中の状態を中断されます。これは、別のスレッドがこのスレッドの Interrupt メソッドを呼び出すと発生します。 |
解説
指定したオブジェクト上のロックを現在所有しているスレッドは、他のスレッドがそのオブジェクトにアクセスできるように、そのオブジェクトを解放するために、このメソッドを呼び出します。呼び出し元は、ロックを再取得するために待機している間は、ブロックされます。呼び出し元が、オブジェクト上の別のスレッドの操作の結果として発生する、オブジェクトの状態の変更を待機しているときに、このメソッドが呼び出されます。
スレッドが Wait を呼び出すと、オブジェクトのロックが解除され、オブジェクトの待機中のキューが入力されます。オブジェクトの実行待ちキューがある場合、そのキュー内の次のスレッドがロックを取得し、オブジェクトを排他で使用します。 Wait を呼び出すすべてのスレッドは、ロックの所有者から送信された Pulse または PulseAll からのシグナルを受信するまで、待機キュー内に残ります。 Pulse が送信されると、待機キューの先頭にあるスレッドだけが影響を受けます。 PulseAll が送信されると、オブジェクトを待機しているすべてのスレッドが影響を受けます。シグナルを受信すると、1 つ以上のスレッドが待機キューから実行待ちキューに入ります。実行待ちキュー内のスレッドは、ロックを再取得することが許可されます。
このメソッドは、呼び出し元のスレッドがオブジェクトのロックを再取得すると制御を戻します。このメソッドは、ロックの所有者が Pulse または PulseAll を呼び出すまで、無制限にブロックします。
呼び出し元は、指定されたオブジェクトに対して Enter が呼び出された回数に関係なく、 Wait を 1 回実行します。概念上は、 Wait メソッドは、オブジェクト上で呼び出し元が Enter を呼び出した回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ Exit を呼び出します。その後、呼び出し元は、オブジェクトを再取得するために待機している間はブロックします。呼び出し元がロックを再取得すると、呼び出し元が行って保存された Enter の回数を復元するために必要な回数だけ Enter が呼び出されます。 Wait を呼び出すと、指定したオブジェクトのロックだけが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、ロックを取得する準備ができているスレッドを格納している実行待ちキューへの参照、オブジェクトの状態の変更通知を待機しているスレッドを格納している待機キューへの参照など、複数の参照を保持しています。 Pulse 、 PulseAll 、 Wait の各メソッドは、同期されたコードのブロック内から呼び出される必要があります。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard
参照
Monitor クラス | Monitor メンバ | System.Threading 名前空間 | Monitor.Wait オーバーロードの一覧 | Thread | スレッド処理 | Monitor