次の方法で共有


Monitor.Wait メソッド (Object, TimeSpan, Boolean)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまで、または指定した時間が経過するまで、またはオプションで待機の前に同期コンテキストの同期ドメインを終了してドメインを再取得するまで、そのスレッドをブロックします。

Overloads Public Shared Function Wait( _
   ByVal obj As Object, _   ByVal timeout As TimeSpan, _   ByVal exitContext As Boolean _) As Boolean
[C#]
public static bool Wait(objectobj,TimeSpantimeout,boolexitContext);
[C++]
public: static bool Wait(Object* obj,TimeSpantimeout,boolexitContext);
[JScript]
public static function Wait(
   obj : Object,timeout : TimeSpan,exitContext : Boolean) : Boolean;

パラメータ

  • obj
    待機を行うオブジェクト。
  • timeout
    このメソッドから制御が戻るまでの待機時間を表す TimeSpan
  • exitContext
    待機の前にコンテキストの同期ドメイン (同期されたコンテキストの場合) を終了および再取得する場合は true 。それ以外の場合は false

戻り値

待機が成功した場合、またはタイムアウトしなかった場合は true 。それ以外の場合は false

例外

例外の種類 条件
ArgumentNullException obj パラメータが null 参照 (Visual Basic では Nothing) です。
ArgumentException timeout パラメータが負か MaxValue より大きい値です。
SynchronizationLockException Wait が、コードの同期ブロック内から呼び出されていません。
ThreadInterruptedException Wait を呼び出すスレッドは、後で待機状態の途中で中断されます。これは、別のスレッドがこのスレッドの Interrupt メソッドを呼び出すと発生します。
ArgumentOutOfRangeException timeout パラメータが負か MaxValue より大きい値です。

解説

このオブジェクトのロックを現在保持しているスレッドは、このメソッドを呼び出して、オブジェクトの状態の条件が一致するまで待機します。 Wait を呼び出した直後に、 Wait を呼び出したスレッドはロックを解放し、待機キューに入ります。この時点で、実行待ちキュー内に次のスレッドが存在する場合は、そのスレッドがロックを制御できます。 Wait を呼び出したスレッドは、ロックを保持しているスレッドが PulseAll を呼び出すまで、または Wait を呼び出したスレッドがキュー内の次のスレッドの場合は、ロックを保持しているスレッドが Pulse を呼び出すまで、待機中のキュー内に残ります。ただし、別のスレッドがこのオブジェクトの Pulse メソッドまたは PulseAll メソッドを呼び出す前に timeout が経過した場合、元のスレッドはロックを再び取得するために実行待ちキューに移動します。オブジェクトの状態の条件が適合しなかった場合、スレッドは再び Wait を呼び出して、条件が合うまで待機中のキューを再入力します。

timeout が 0 の場合は、 Wait を呼び出すスレッドはロックを解放し、すぐに実行待ちキューに入ってロックを再取得します。

同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、ロックを取得する準備ができているスレッドを格納している実行待ちキューへの参照、オブジェクトの状態の変更通知を待機しているスレッドを格納している待機キューへの参照など、複数の参照を保持しています。 PulsePulseAllWait の各メソッドは、同期されたコードのブロック内から呼び出される必要があります。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Monitor クラス | Monitor メンバ | System.Threading 名前空間 | Monitor.Wait オーバーロードの一覧 | Thread | スレッド処理 | Monitor