Monitor.Wait Monitor.Wait Monitor.Wait Monitor.Wait Method

定義

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock.

オーバーロード

Wait(Object, Int32, Boolean) Wait(Object, Int32, Boolean) Wait(Object, Int32, Boolean) Wait(Object, Int32, Boolean)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue. このメソッドは、コンテキストの同期ドメイン (同期されたコンテキストの場合) が待機の前に終了し、後で再取得されるかどうかも指定します。This method also specifies whether the synchronization domain for the context (if in a synchronized context) is exited before the wait and reacquired afterward.

Wait(Object) Wait(Object) Wait(Object) Wait(Object)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock.

Wait(Object, Int32) Wait(Object, Int32) Wait(Object, Int32) Wait(Object, Int32)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan) Wait(Object, TimeSpan) Wait(Object, TimeSpan) Wait(Object, TimeSpan)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan, Boolean) Wait(Object, TimeSpan, Boolean) Wait(Object, TimeSpan, Boolean) Wait(Object, TimeSpan, Boolean)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue. または、待機の前に同期化されたコンテキストの同期ドメインを終了し、ドメインを後で再取得します。Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

Wait(Object, Int32, Boolean) Wait(Object, Int32, Boolean) Wait(Object, Int32, Boolean) Wait(Object, Int32, Boolean)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue. このメソッドは、コンテキストの同期ドメイン (同期されたコンテキストの場合) が待機の前に終了し、後で再取得されるかどうかも指定します。This method also specifies whether the synchronization domain for the context (if in a synchronized context) is exited before the wait and reacquired afterward.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

パラメーター

obj
Object Object Object Object

待機を行うオブジェクト。The object on which to wait.

millisecondsTimeout
Int32 Int32 Int32 Int32

スレッドが実行待ちキューに入るまでの待機時間 (ミリ秒)。The number of milliseconds to wait before the thread enters the ready queue.

exitContext
Boolean Boolean Boolean Boolean

待機の前にコンテキストの同期ドメイン (同期されたコンテキストの場合) を終了および再取得する場合はtrue 。それ以外の場合は falsetrue to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は falsetrue if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. このメソッドは、ロックが再取得されるまで制御を戻しません。The method does not return until the lock is reacquired.

例外

obj パラメーターが null です。The obj parameter is null.

Wait は、同期されたコード ブロック内からは呼び出されません。Wait is not invoked from within a synchronized block of code.

Wait を呼び出したスレッドは、後で待機中の状態を中断されます。The thread that invokes Wait is later interrupted from the waiting state. これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。This happens when another thread calls this thread's Interrupt() method.

millisecondsTimeout パラメーターの値が負で、Infinite と等しくありません。The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

注釈

このメソッドは、 objパラメーターに対して排他ロックを再取得するまで、を返しません。This method does not return until it reacquires an exclusive lock on the obj parameter.

現在、指定したオブジェクトのロックを所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. ロックの再取得を待機している間に、呼び出し元がブロックされました。The caller is blocked while waiting to reacquire the lock. このメソッドは、別のスレッドの操作の結果として発生する状態の変化を呼び出し元が待機する必要があるときに呼び出されます。This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

タイムアウトにより、別のスレッドがメソッドまたはPulse PulseAllメソッドを呼び出さずにロックを解放した場合に、現在のスレッドが無期限にブロックされないようにすることができます。The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. また、スレッドを準備完了キューに移動し、待機キュー内で他のスレッドをバイパスして、ロックをすぐに再取得できるようにします。It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. スレッドは、 Waitメソッドの戻り値をテストして、タイムアウト前にロックを再取得するかどうかを判断できます。スレッドは、待機に入る原因となった条件を評価できます。必要に応じWaitて、メソッドを再度呼び出します。The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

スレッドがを呼びWait出すと、ロックが解放され、待機キューに入ります。When a thread calls Wait, it releases the lock and enters the waiting queue. この時点で、準備完了キュー内の次のスレッド (存在する場合) は、ロックの制御を許可されます。At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. Wait呼び出したスレッドは、ロックを保持しているスレッドが呼び出さPulseAllれるか、またはキュー Pulse内の次のスレッドが呼び出されるまで、待機キューに残ります。The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. ただし、 millisecondsTimeout別のPulseスレッドがこのオブジェクトまたはPulseAllメソッドを呼び出す前にが経過すると、ロックを取り戻すために元のスレッドが準備完了キューに移動されます。However, if millisecondsTimeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

注意

パラメーターにが指定されているInfinite場合、ロックの所有者がまたはPulseAllPulse呼び出す場合を除き、このメソッドは無期限にブロックします。 millisecondsTimeoutIf Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. millisecondsTimeout 0 に等しい場合、を呼び出しWaitたスレッドはロックを解放し、ロックを再び開始するためにすぐに準備待ちキューに入ります。If millisecondsTimeout equals 0, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

呼び出し元はWait 、指定したオブジェクトに対してEnterが呼び出された回数に関係なく、1回だけ実行されます。The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 概念的にはWait 、メソッドは、 Enter呼び出し元がオブジェクトに対して呼び出した回数Exitを格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出します。Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. その後、オブジェクトの再取得を待機している間、呼び出し元はブロックします。The caller then blocks while waiting to reacquire the object. 呼び出し元がロックを再取得すると、システムEnterは、呼び出し元に対して保存さEnterれたカウントを復元するために必要な回数だけを呼び出します。When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Wait呼び出すと、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

注意

同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、準備されたキューへの参照、ロックを取得する準備ができているスレッドを含む、待機キューへの参照など、いくつかの参照を保持します。これには、オブジェクトの状態の変更の通知を待機しているスレッド。A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

PulsePulseAllおよびWaitの各メソッドは、同期されたコードブロック内から呼び出す必要があります。The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Pulseメソッドの解説では、スレッドが待機Pulseしていないときにが呼び出された場合の動作について説明します。The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

コンテキストの終了に関する注意事項Notes on Exiting the Context

既定exitContext以外のマネージコンテキスト内からWaitメソッドが呼び出されない限り、パラメーターは無効です。TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. これは、スレッドがからContextBoundObject派生したクラスのインスタンスの呼び出し内にある場合に発生する可能性があります。This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. からContextBoundObject派生ContextBoundObjectしていないクラスのメソッドを現在実行している場合でも、が現在のアプリケーションドメインのスタック上にある場合は、既定以外のコンテキストにすることができます。 StringEven if you are currently executing a method on a class that is not derived from ContextBoundObject, like String, you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.

コードが既定以外のコンテキストで実行されてtrueいるexitContext場合、にを指定すると、スレッドはWaitメソッドを実行する前に、既定以外のマネージコンテキスト (つまり、既定のコンテキストに遷移する) を終了します。When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing the Wait method. メソッドのWait呼び出しが完了した後、元の既定以外のコンテキストに戻ります。It returns to the original nondefault context after the call to the Wait method completes.

これは、コンテキストバインドクラスにSynchronizationAttribute属性が適用されている場合に便利です。This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. その場合、クラスのメンバーへのすべての呼び出しが自動的に同期され、同期ドメインがクラスのコード本文全体になります。In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. メンバーの呼び出し履歴内のコードがWaitメソッドを呼び出し、にexitContexttrue指定した場合、スレッドは同期ドメインを終了します。これにより、オブジェクトの任意のメンバーへの呼び出しでブロックされているスレッドを続行できます。If code in the call stack of a member calls the Wait method and specifies true for exitContext, the thread exits the synchronization domain, allowing a thread that is blocked on a call to any member of the object to proceed. メソッドからWait制御が戻ったとき、呼び出しを行ったスレッドは、同期ドメインの再入力を待機する必要があります。When the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

こちらもご覧ください

Wait(Object) Wait(Object) Wait(Object) Wait(Object)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait (object obj);
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

パラメーター

obj
Object Object Object Object

待機を行うオブジェクト。The object on which to wait.

戻り値

呼び出し元が、指定したオブジェクトのロックを再取得したために呼び出しが返された場合は truetrue if the call returned because the caller reacquired the lock for the specified object. このメソッドは、ロックが再取得されないと制御を戻しません。This method does not return if the lock is not reacquired.

例外

obj パラメーターが null です。The obj parameter is null.

呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。The calling thread does not own the lock for the specified object.

Wait を呼び出したスレッドは、後で待機中の状態を中断されます。The thread that invokes Wait is later interrupted from the waiting state. これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。This happens when another thread calls this thread's Interrupt() method.

注釈

現在、指定したオブジェクトのロックを所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. ロックの再取得を待機している間に、呼び出し元がブロックされました。The caller is blocked while waiting to reacquire the lock. このメソッドは、別のスレッドの操作の結果として発生する状態の変化を呼び出し元が待機する必要があるときに呼び出されます。This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

スレッドがを呼びWait出すと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. オブジェクトの準備完了キュー内の次のスレッド (存在する場合) は、ロックを取得し、オブジェクトを排他的に使用します。The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. を呼び出しWaitたすべてのスレッドは、ロックの所有者によって送信PulseAllされたまたはからPulseのシグナルを受信するまで待機キューに残ります。All threads that call Wait remain in the waiting queue until they receive a signal from Pulse or PulseAll, sent by the owner of the lock. Pulseが送信されると、待機キューの先頭にあるスレッドだけが影響を受けます。If Pulse is sent, only the thread at the head of the waiting queue is affected. PulseAllが送信されると、オブジェクトを待機しているすべてのスレッドが影響を受けます。If PulseAll is sent, all threads that are waiting for the object are affected. シグナルを受信すると、1つまたは複数のスレッドが待機キューを離れ、準備完了キューに入ります。When the signal is received, one or more threads leave the waiting queue and enter the ready queue. 準備完了キュー内のスレッドは、ロックを再取得することが許可されています。A thread in the ready queue is permitted to reacquire the lock.

このメソッドは、呼び出し元のスレッドがオブジェクトのロックを再取得たときにを返します。This method returns when the calling thread reacquires the lock on the object. ロックの所有者がまたはPulse PulseAllを呼び出さない場合、このメソッドは無期限にブロックすることに注意してください。Note that this method blocks indefinitely if the holder of the lock does not call Pulse or PulseAll.

呼び出し元はWait 、指定したオブジェクトに対してEnterが呼び出された回数に関係なく、1回だけ実行されます。The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 概念的にはWait 、メソッドは、 Enter呼び出し元がオブジェクトに対して呼び出した回数Exitを格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出します。Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. その後、オブジェクトの再取得を待機している間、呼び出し元はブロックします。The caller then blocks while waiting to reacquire the object. 呼び出し元がロックを再取得すると、システムEnterは、呼び出し元に対して保存さEnterれたカウントを復元するために必要な回数だけを呼び出します。When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Wait呼び出すと、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

同期されたオブジェクトには、現在ロックを保持しているスレッドへの参照、準備完了キューへの参照、ロックを取得する準備ができているスレッドを含む、待機キューへの参照など、いくつかの参照が保持されていることに注意してください。オブジェクトの状態が変更されたことを示す通知を待機しているスレッドを格納します。Note that a synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

PulsePulseAllおよびWaitの各メソッドは、同期されたコードブロック内から呼び出す必要があります。The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Pulseメソッドの解説では、スレッドが待機Pulseしていないときにが呼び出された場合の動作について説明します。The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

こちらもご覧ください

Wait(Object, Int32) Wait(Object, Int32) Wait(Object, Int32) Wait(Object, Int32)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait (object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

パラメーター

obj
Object Object Object Object

待機を行うオブジェクト。The object on which to wait.

millisecondsTimeout
Int32 Int32 Int32 Int32

スレッドが実行待ちキューに入るまでの待機時間 (ミリ秒)。The number of milliseconds to wait before the thread enters the ready queue.

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は falsetrue if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. このメソッドは、ロックが再取得されるまで制御を戻しません。The method does not return until the lock is reacquired.

例外

obj パラメーターが null です。The obj parameter is null.

呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。The calling thread does not own the lock for the specified object.

Wait を呼び出したスレッドは、後で待機中の状態を中断されます。The thread that invokes Wait is later interrupted from the waiting state. これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。This happens when another thread calls this thread's Interrupt() method.

millisecondsTimeout パラメーターの値が負で、Infinite と等しくありません。The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

注釈

このメソッドは、 objパラメーターに対して排他ロックを再取得するまで、を返しません。This method does not return until it reacquires an exclusive lock on the obj parameter.

現在、指定したオブジェクトのロックを所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. ロックの再取得を待機している間に、呼び出し元がブロックされました。The caller is blocked while waiting to reacquire the lock. このメソッドは、別のスレッドの操作の結果として発生する状態の変化を呼び出し元が待機する必要があるときに呼び出されます。This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

タイムアウトにより、別のスレッドがメソッドまたはPulse PulseAllメソッドを呼び出さずにロックを解放した場合に、現在のスレッドが無期限にブロックされないようにすることができます。The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. また、スレッドを準備完了キューに移動し、待機キュー内で他のスレッドをバイパスして、ロックをすぐに再取得できるようにします。It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. スレッドは、 Waitメソッドの戻り値をテストして、タイムアウト前にロックを再取得するかどうかを判断できます。スレッドは、待機に入る原因となった条件を評価できます。必要に応じWaitて、メソッドを再度呼び出します。The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

スレッドがを呼びWait出すと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. オブジェクトの準備完了キュー内の次のスレッド (存在する場合) は、ロックを取得し、オブジェクトを排他的に使用します。The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Wait呼び出したスレッドは、ロックを保持しているスレッドが呼び出さPulseAllれるか、またはキュー Pulse内の次のスレッドが呼び出されるまで、待機キューに残ります。The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. ただし、 millisecondsTimeout別のPulseスレッドがこのオブジェクトまたはPulseAllメソッドを呼び出す前にが経過すると、ロックを取り戻すために元のスレッドが準備完了キューに移動されます。However, if millisecondsTimeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

注意

パラメーターにが指定されているInfinite場合、ロックの所有者がまたはPulseAllPulse呼び出す場合を除き、このメソッドは無期限にブロックします。 millisecondsTimeoutIf Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. millisecondsTimeout 0 に等しい場合、を呼び出しWaitたスレッドはロックを解放し、ロックを再び開始するためにすぐに準備待ちキューに入ります。If millisecondsTimeout equals 0, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

呼び出し元はWait 、指定したオブジェクトに対してEnterが呼び出された回数に関係なく、1回だけ実行されます。The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 概念的にはWait 、メソッドは、 Enter呼び出し元がオブジェクトに対して呼び出した回数Exitを格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出します。Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. その後、オブジェクトの再取得を待機している間、呼び出し元はブロックします。The caller then blocks while waiting to reacquire the object. 呼び出し元がロックを再取得すると、システムEnterは、呼び出し元に対して保存さEnterれたカウントを復元するために必要な回数だけを呼び出します。When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Wait呼び出すと、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

注意

同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、準備されたキューへの参照、ロックを取得する準備ができているスレッドを含む、待機キューへの参照など、いくつかの参照を保持します。これには、オブジェクトの状態の変更の通知を待機しているスレッド。A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

PulsePulseAllおよびWaitの各メソッドは、同期されたコードブロック内から呼び出す必要があります。The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Pulseメソッドの解説では、スレッドが待機Pulseしていないときにが呼び出された場合の動作について説明します。The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

こちらもご覧ください

Wait(Object, TimeSpan) Wait(Object, TimeSpan) Wait(Object, TimeSpan) Wait(Object, TimeSpan)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait (object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

パラメーター

obj
Object Object Object Object

待機を行うオブジェクト。The object on which to wait.

timeout
TimeSpan TimeSpan TimeSpan TimeSpan

スレッドが実行待ちキューに入るまでの時間を表す TimeSpanA TimeSpan representing the amount of time to wait before the thread enters the ready queue.

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は falsetrue if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. このメソッドは、ロックが再取得されるまで制御を戻しません。The method does not return until the lock is reacquired.

例外

obj パラメーターが null です。The obj parameter is null.

呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。The calling thread does not own the lock for the specified object.

Wait を呼び出したスレッドは、後で待機中の状態を中断されます。The thread that invokes Wait is later interrupted from the waiting state. これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。This happens when another thread calls this thread's Interrupt() method.

timeout パラメーターのミリ秒単位の値が負で、かつ Infinite (-1 ミリ秒) ではありません。または MaxValue より大きい値です。The value of the timeout parameter in milliseconds is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

注釈

このメソッドは、 objパラメーターに対して排他ロックを再取得するまで、を返しません。This method does not return until it reacquires an exclusive lock on the obj parameter.

現在、指定したオブジェクトのロックを所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. ロックの再取得を待機している間に、呼び出し元がブロックされました。The caller is blocked while waiting to reacquire the lock. このメソッドは、別のスレッドの操作の結果として発生する状態の変化を呼び出し元が待機する必要があるときに呼び出されます。This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

タイムアウトにより、別のスレッドがメソッドまたはPulse PulseAllメソッドを呼び出さずにロックを解放した場合に、現在のスレッドが無期限にブロックされないようにすることができます。The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. また、スレッドを準備完了キューに移動し、待機キュー内で他のスレッドをバイパスして、ロックをすぐに再取得できるようにします。It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. スレッドは、 Waitメソッドの戻り値をテストして、タイムアウト前にロックを再取得するかどうかを判断できます。スレッドは、待機に入る原因となった条件を評価できます。必要に応じWaitて、メソッドを再度呼び出します。The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

スレッドがを呼びWait出すと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. オブジェクトの準備完了キュー内の次のスレッド (存在する場合) は、ロックを取得し、オブジェクトを排他的に使用します。The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Wait呼び出したスレッドは、ロックを保持しているスレッドが呼び出さPulseAllれるか、またはキュー Pulse内の次のスレッドが呼び出されるまで、待機キューに残ります。The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. ただし、 timeout別のPulseスレッドがこのオブジェクトまたはPulseAllメソッドを呼び出す前にが経過すると、ロックを取り戻すために元のスレッドが準備完了キューに移動されます。However, if timeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

注意

パラメーターに-1 ミリ秒をPulse PulseAll表すが指定されている場合、ロックの所有者がまたはを呼び出す場合を除き、このメソッドは無期限にTimeSpanブロック timeoutします。If a TimeSpan representing -1 millisecond is specified for the timeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. timeout 0 ミリ秒の場合、を呼び出しWaitたスレッドはロックを解放し、ロックを再び開始するためにすぐに準備待ちキューに入ります。If timeout is 0 milliseconds, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

呼び出し元はWait 、指定したオブジェクトに対してEnterが呼び出された回数に関係なく、1回だけ実行されます。The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 概念的にはWait 、メソッドは、 Enter呼び出し元がオブジェクトに対して呼び出した回数Exitを格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出します。Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. その後、オブジェクトの再取得を待機している間、呼び出し元はブロックします。The caller then blocks while waiting to reacquire the object. 呼び出し元がロックを再取得すると、システムEnterは、呼び出し元に対して保存さEnterれたカウントを復元するために必要な回数だけを呼び出します。When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Wait呼び出すと、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

注意

同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、準備されたキューへの参照、ロックを取得する準備ができているスレッドを含む、待機キューへの参照など、いくつかの参照を保持します。これには、オブジェクトの状態の変更の通知を待機しているスレッド。A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

PulsePulseAllおよびWaitの各メソッドは、同期されたコードブロック内から呼び出す必要があります。The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Pulseメソッドの解説では、スレッドが待機Pulseしていないときにが呼び出された場合の動作について説明します。The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

こちらもご覧ください

Wait(Object, TimeSpan, Boolean) Wait(Object, TimeSpan, Boolean) Wait(Object, TimeSpan, Boolean) Wait(Object, TimeSpan, Boolean)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。Releases the lock on an object and blocks the current thread until it reacquires the lock. 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。If the specified time-out interval elapses, the thread enters the ready queue. または、待機の前に同期化されたコンテキストの同期ドメインを終了し、ドメインを後で再取得します。Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

パラメーター

obj
Object Object Object Object

待機を行うオブジェクト。The object on which to wait.

timeout
TimeSpan TimeSpan TimeSpan TimeSpan

スレッドが実行待ちキューに入るまでの時間を表す TimeSpanA TimeSpan representing the amount of time to wait before the thread enters the ready queue.

exitContext
Boolean Boolean Boolean Boolean

待機の前にコンテキストの同期ドメイン (同期されたコンテキストの場合) を終了および再取得する場合はtrue 。それ以外の場合は falsetrue to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は falsetrue if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. このメソッドは、ロックが再取得されるまで制御を戻しません。The method does not return until the lock is reacquired.

例外

obj パラメーターが null です。The obj parameter is null.

Wait は、同期されたコード ブロック内からは呼び出されません。Wait is not invoked from within a synchronized block of code.

Wait を呼び出すスレッドは、後で待機状態の途中で中断されます。The thread that invokes Wait is later interrupted from the waiting state. これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。This happens when another thread calls this thread's Interrupt() method.

timeout パラメーターが負で Infinite (-1 ミリ秒) を表していないか、MaxValue よりも大きいです。The timeout parameter is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

注釈

このメソッドは、 objパラメーターに対して排他ロックを再取得するまで、を返しません。This method does not return until it reacquires an exclusive lock on the obj parameter.

現在、指定したオブジェクトのロックを所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. ロックの再取得を待機している間に、呼び出し元がブロックされました。The caller is blocked while waiting to reacquire the lock. このメソッドは、別のスレッドの操作の結果として発生する状態の変化を呼び出し元が待機する必要があるときに呼び出されます。This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

タイムアウトにより、別のスレッドがメソッドまたはPulse PulseAllメソッドを呼び出さずにロックを解放した場合に、現在のスレッドが無期限にブロックされないようにすることができます。The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. また、スレッドを準備完了キューに移動し、待機キュー内で他のスレッドをバイパスして、ロックをすぐに再取得できるようにします。It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. スレッドは、 Waitメソッドの戻り値をテストして、タイムアウト前にロックを再取得するかどうかを判断できます。スレッドは、待機に入る原因となった条件を評価できます。必要に応じWaitて、メソッドを再度呼び出します。The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

スレッドがを呼びWait出すと、ロックが解放され、待機キューに入ります。When a thread calls Wait, it releases the lock and enters the waiting queue. この時点で、準備完了キュー内の次のスレッド (存在する場合) は、ロックの制御を許可されます。At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. Wait呼び出したスレッドは、ロックを保持しているスレッドが呼び出さPulseAllれるか、またはキュー Pulse内の次のスレッドが呼び出されるまで、待機キューに残ります。The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. ただし、別timeoutPulseスレッドがこのオブジェクトまたはPulseAllメソッドを呼び出す前にミリ秒が経過した場合、元のスレッドはロックを取り戻すために準備完了キューに移動されます。However, if timeout milliseconds elapse before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

注意

パラメーターに-1 ミリ秒をPulse PulseAll表すが指定されている場合、ロックの所有者がまたはを呼び出す場合を除き、このメソッドは無期限にTimeSpanブロック timeoutします。If a TimeSpan representing -1 millisecond is specified for the timeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. timeout 0 ミリ秒の場合、を呼び出しWaitたスレッドはロックを解放し、ロックを再び開始するためにすぐに準備待ちキューに入ります。If timeout is 0 milliseconds, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

呼び出し元はWait 、指定したオブジェクトに対してEnterが呼び出された回数に関係なく、1回だけ実行されます。The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 概念的にはWait 、メソッドは、 Enter呼び出し元がオブジェクトに対して呼び出した回数Exitを格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出します。Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. その後、オブジェクトの再取得を待機している間、呼び出し元はブロックします。The caller then blocks while waiting to reacquire the object. 呼び出し元がロックを再取得すると、システムEnterは、呼び出し元に対して保存さEnterれたカウントを復元するために必要な回数だけを呼び出します。When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Wait呼び出すと、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

注意

同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、準備されたキューへの参照、ロックを取得する準備ができているスレッドを含む、待機キューへの参照など、いくつかの参照を保持します。これには、オブジェクトの状態の変更の通知を待機しているスレッド。A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

PulsePulseAllおよびWaitの各メソッドは、同期されたコードブロック内から呼び出す必要があります。The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Pulseメソッドの解説では、スレッドが待機Pulseしていないときにが呼び出された場合の動作について説明します。The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

コンテキストの終了に関する注意事項Notes on Exiting the Context

既定exitContext以外のマネージコンテキスト内からWaitメソッドが呼び出されない限り、パラメーターは無効です。TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. これは、スレッドがからContextBoundObject派生したクラスのインスタンスの呼び出し内にある場合に発生する可能性があります。This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. からContextBoundObject派生ContextBoundObjectしていないクラスのメソッドを現在実行している場合でも、が現在のアプリケーションドメインのスタック上にある場合は、既定以外のコンテキストにすることができます。 StringEven if you are currently executing a method on a class that is not derived from ContextBoundObject, like String, you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.

コードが既定以外のコンテキストで実行されてtrueいるexitContext場合、にを指定すると、スレッドはWaitメソッドを実行する前に、既定以外のマネージコンテキスト (つまり、既定のコンテキストに遷移する) を終了します。When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing the Wait method. メソッドのWait呼び出しが完了した後、元の既定以外のコンテキストに戻ります。It returns to the original nondefault context after the call to the Wait method completes.

これは、コンテキストバインドクラスにSynchronizationAttribute属性が適用されている場合に便利です。This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. その場合、クラスのメンバーへのすべての呼び出しが自動的に同期され、同期ドメインがクラスのコード本文全体になります。In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. メンバーの呼び出し履歴内のコードがWaitメソッドを呼び出し、にexitContexttrue指定した場合、スレッドは同期ドメインを終了します。これにより、オブジェクトの任意のメンバーへの呼び出しでブロックされているスレッドを続行できます。If code in the call stack of a member calls the Wait method and specifies true for exitContext, the thread exits the synchronization domain, allowing a thread that is blocked on a call to any member of the object to proceed. メソッドからWait制御が戻ったとき、呼び出しを行ったスレッドは、同期ドメインの再入力を待機する必要があります。When the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

こちらもご覧ください

適用対象