Monitor.Wait Methode

Definition

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock.

Überlädt

Wait(Object, Int32, Boolean)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.If the specified time-out interval elapses, the thread enters the ready queue. Diese Methode gibt außerdem an, ob die Synchronisierungsdomäne danach für den Kontext (wenn es sich um einen synchronisierten Kontext handelt) vor dem Warten und erneuten Erhalten verlassen wird.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)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock.

Wait(Object, Int32)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan, Boolean)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.If the specified time-out interval elapses, the thread enters the ready queue. Beendet vor dem Warten optional auch die Synchronisierungsdomäne für den synchronisierten Kontext und erhält die Domäne anschließend wieder.Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

Wait(Object, Int32, Boolean)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.If the specified time-out interval elapses, the thread enters the ready queue. Diese Methode gibt außerdem an, ob die Synchronisierungsdomäne danach für den Kontext (wenn es sich um einen synchronisierten Kontext handelt) vor dem Warten und erneuten Erhalten verlassen wird.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

Parameter

obj
Object

Das Objekt, auf das gewartet werden soll.The object on which to wait.

millisecondsTimeout
Int32

Die Anzahl von Millisekunden, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.The number of milliseconds to wait before the thread enters the ready queue.

exitContext
Boolean

true, um die Synchronisierungsdomäne für den Kontext (sofern ein synchronisierter Kontext vorliegt) vor dem Wartevorgang zu beenden und erneut zu erhalten, andernfalls false.true to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

Gibt zurück

true, wenn die Sperre erneut erhalten wurde, bevor die angegebene Zeitspanne verstrichen ist. false, wenn die Sperre erneut erhalten wurde, nachdem die angegebene Zeitspanne verstrichen ist.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.The method does not return until the lock is reacquired.

Ausnahmen

Der obj-Parameter ist null.The obj parameter is null.

Wait wird nicht aus einem synchronisierten Codeblock aufgerufen.Wait is not invoked from within a synchronized block of code.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen.The thread that invokes Wait is later interrupted from the waiting state. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.This happens when another thread calls this thread's Interrupt() method.

Der Wert des millisecondsTimeout-Parameters ist negativ und ungleich Infinite.The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

Hinweise

Diese Methode gibt erst dann zurück, wenn Sie eine exklusive Sperre für den obj -Parameter erhält.This method does not return until it reacquires an exclusive lock on the obj parameter.

Der Thread, der die Sperre für das angegebene Objekt zurzeit besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann.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. Der Aufrufer ist blockiert, während er darauf wartet, die Sperre erneut abzurufen.The caller is blocked while waiting to reacquire the lock. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.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.

Das Timeout stellt sicher, dass der aktuelle Thread nicht unbegrenzt blockiert wird, wenn ein anderer Thread die Sperre freigibt, Pulse ohne PulseAll zuerst die-oder die-Methode aufrufen zu muss.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. Außerdem wird der Thread in die Warteschlange für die Warteschlange verschoben, sodass andere Threads vor ihm in der Warteschlange umgangen werden, damit die Sperre früher wieder hergestellt werden kann.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. Der Thread kann den Rückgabewert der Wait Methode testen, um zu bestimmen, ob die Sperre vor dem Timeout erneut abgerufen wurde. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in den warte Vorgang gelangt Wait , und die Methode gegebenenfalls erneut aufzurufen.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.

Wenn ein Thread aufruft Wait, gibt er die Sperre frei und wechselt in die Warteschlange.When a thread calls Wait, it releases the lock and enters the waiting queue. An diesem Punkt kann der nächste Thread in der Warteschlange (sofern vorhanden) die Kontrolle über die Sperre übernehmen.At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. Der Thread, der Wait aufgerufen hat PulseAll, verbleibt in der Warteschlange, bis entweder ein Thread, der die Sperre besitzt, oder der nächste in der Warteschlange ist, und ein PulseThread, der die Sperre aufruft.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. Wenn millisecondsTimeout jedoch abläuft, bevor ein anderer Thread die-Methode oder Pulse PulseAll die-Methode dieses Objekts aufruft, wird der ursprüngliche Thread in die bereite Warteschlange verschoben, um die Sperre wiederherzustellen.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.

Hinweis

Wenn Infinite für den millisecondsTimeout -Parameter angegeben wird, blockiert diese Methode unbegrenzt, es sei denn, der Pulse Inhaber PulseAllder Sperre ruft oder auf.If Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. Wenn millisecondsTimeout gleich 0 ist, gibt der Thread Wait , der aufruft, die Sperre frei und wechselt dann sofort in die bereite Warteschlange, um die Sperre wiederherzustellen.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.

Der Aufrufer wird einmal ausgeführt Wait , unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Konzeptionell speichert die Wait -Methode die Anzahl der Aufrufe, die der Enter Aufrufer für das Exit Objekt aufgerufen hat, und ruft so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben.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. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen.The caller then blocks while waiting to reacquire the object. Wenn der Aufrufer die Sperre erneut erhält, ruft Enter das System so oft wie nötig auf, um Enter die gespeicherte Anzahl für den Aufrufer wiederherzustellen.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Beim Wait Aufrufen von wird nur die Sperre für das angegebene Objekt freigegeben. wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.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.

Hinweis

Ein synchronisiertes Objekt enthält mehrere Verweise, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die bereit sind, die Sperre abzurufen, und einen Verweis auf die Warteschlange, die das Threads, die auf eine Benachrichtigung über eine Änderung des Objekt Zustands warten.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.

Die PulseMethoden PulseAll, undWait müssen in einem synchronisierten Codeblock aufgerufen werden.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Die Hinweise für die Pulse -Methode erläutern, was Pulse geschieht, wenn aufgerufen wird, wenn keine Threads warten.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Hinweise zum Beenden des KontextsNotes on Exiting the Context

DerexitContext -Parameter hat keine Auswirkung, Wait es sei denn, die-Methode wird in einem nicht standardmäßigen verwalteten Kontext aufgerufen.TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. Dies kann vorkommen, wenn sich der Thread innerhalb eines Aufrufes einer Instanz einer von ContextBoundObjectabgeleiteten Klasse befindet.This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. Auch wenn Sie derzeit eine Methode für eine Klasse ausführen, die nicht von ContextBoundObjectabgeleitet ist String, können Sie sich in einem nicht standardmäßigen Kontext befinden, wenn ContextBoundObject sich ein auf dem Stapel in der aktuellen Anwendungsdomäne befindet.Even 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.

Wenn Ihr Code in einem nicht standardmäßigen Kontext ausgeführt wird, true bewirkt exitContext die Angabe von for, dass der Thread den nicht standardmäßigen verwalteten Kontext verlässt (d. h., um zum Standard Wait Kontext zu wechseln), bevor die-Methode ausgeführt wird.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. Sie kehrt zum ursprünglichen, nicht standardmäßigen Kontext zurück, nachdem der Wait -Vorgang abgeschlossen wurde.It returns to the original nondefault context after the call to the Wait method completes.

Dies kann hilfreich sein, wenn die Kontext gebundene Klasse über das SynchronizationAttribute -Attribut verfügt.This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. In diesem Fall werden alle Aufrufe an Member der-Klasse automatisch synchronisiert, und die Synchronisierungs Domäne ist der gesamte Code Körper für die-Klasse.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. Wenn Code in der Aufruf Stapel eines Members die Wait -Methode aufruft und für true exitContextangibt, beendet der Thread die Synchronisierungs Domäne, sodass ein Thread, der bei einem Aufruf von einem beliebigen Member des-Objekts blockiert ist, fortgesetzt werden kann.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. Wenn die Wait -Methode zurückgibt, muss der Thread, der den-Befehl erstellt hat, warten, bis die Synchronisierungs Domäne erneut eingegeben wirdWhen the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

Siehe auch

Wait(Object)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.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

Parameter

obj
Object

Das Objekt, auf das gewartet werden soll.The object on which to wait.

Gibt zurück

true, wenn der Aufruf beendet wurde, weil der Aufrufer die Sperre für das angegebene Objekt erneut erhalten hat.true if the call returned because the caller reacquired the lock for the specified object. Diese Methode wird nicht beendet, wenn die Sperre nicht erneut erhalten wird.This method does not return if the lock is not reacquired.

Ausnahmen

Der obj-Parameter ist null.The obj parameter is null.

Der aufrufende Thread besitzt keine Sperre für das angegebene Objekt.The calling thread does not own the lock for the specified object.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen.The thread that invokes Wait is later interrupted from the waiting state. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.This happens when another thread calls this thread's Interrupt() method.

Hinweise

Der Thread, der die Sperre für das angegebene Objekt zurzeit besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann.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. Der Aufrufer ist blockiert, während er darauf wartet, die Sperre erneut abzurufen.The caller is blocked while waiting to reacquire the lock. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.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.

Wenn ein Thread aufruft Wait, gibt er die Sperre für das Objekt frei und wechselt in die Warteschlange des Objekts.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. Der nächste Thread in der Ready-Warteschlange des-Objekts (sofern vorhanden) erhält die Sperre und verfügt über eine exklusive Verwendung des-Objekts.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Alle Threads, die Wait aufzurufen, verbleiben in der Warteschlange, bis Pulse Sie PulseAllein Signal von oder empfangen, das vom Besitzer der Sperre gesendet wird.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. Wenn Pulse gesendet wird, ist nur der Thread an der Spitze der Warteschlange betroffen.If Pulse is sent, only the thread at the head of the waiting queue is affected. Wenn PulseAll gesendet wird, sind alle Threads betroffen, die auf das-Objekt warten.If PulseAll is sent, all threads that are waiting for the object are affected. Wenn das Signal empfangen wird, verlässt mindestens ein Thread die Warteschlange, und die Warteschlange wird in die Warteschlange eingereiht.When the signal is received, one or more threads leave the waiting queue and enter the ready queue. Ein Thread in der Warteschlange ist berechtigt, die Sperre erneut abzurufen.A thread in the ready queue is permitted to reacquire the lock.

Diese Methode gibt zurück, wenn der aufrufenden Thread die Sperre für das Objekt wieder erhält.This method returns when the calling thread reacquires the lock on the object. Beachten Sie, dass diese Methode unbegrenzt blockiert, wenn der Inhaber der Sperre nicht Pulse oder PulseAllaufruft.Note that this method blocks indefinitely if the holder of the lock does not call Pulse or PulseAll.

Der Aufrufer wird einmal ausgeführt Wait , unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Konzeptionell speichert die Wait -Methode die Anzahl der Aufrufe, die der Enter Aufrufer für das Exit Objekt aufgerufen hat, und ruft so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben.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. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen.The caller then blocks while waiting to reacquire the object. Wenn der Aufrufer die Sperre erneut erhält, ruft Enter das System so oft wie nötig auf, um Enter die gespeicherte Anzahl für den Aufrufer wiederherzustellen.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Beim Wait Aufrufen von wird nur die Sperre für das angegebene Objekt freigegeben. wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.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.

Beachten Sie, dass ein synchronisiertes Objekt mehrere Verweise enthält, einschließlich eines Verweises auf den Thread, der derzeit die Sperre besitzt, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, sowie einen Verweis auf die Warteschlange, die enthält die Threads, die auf die Benachrichtigung über eine Änderung des Objekt Zustands warten.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.

Die PulseMethoden PulseAll, undWait müssen in einem synchronisierten Codeblock aufgerufen werden.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Die Hinweise für die Pulse -Methode erläutern, was Pulse geschieht, wenn aufgerufen wird, wenn keine Threads warten.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Siehe auch

Wait(Object, Int32)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.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

Parameter

obj
Object

Das Objekt, auf das gewartet werden soll.The object on which to wait.

millisecondsTimeout
Int32

Die Anzahl von Millisekunden, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.The number of milliseconds to wait before the thread enters the ready queue.

Gibt zurück

true, wenn die Sperre erneut erhalten wurde, bevor die angegebene Zeitspanne verstrichen ist. false, wenn die Sperre erneut erhalten wurde, nachdem die angegebene Zeitspanne verstrichen ist.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.The method does not return until the lock is reacquired.

Ausnahmen

Der obj-Parameter ist null.The obj parameter is null.

Der aufrufende Thread besitzt keine Sperre für das angegebene Objekt.The calling thread does not own the lock for the specified object.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen.The thread that invokes Wait is later interrupted from the waiting state. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.This happens when another thread calls this thread's Interrupt() method.

Der Wert des millisecondsTimeout-Parameters ist negativ und ungleich Infinite.The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

Hinweise

Diese Methode gibt erst dann zurück, wenn Sie eine exklusive Sperre für den obj -Parameter erhält.This method does not return until it reacquires an exclusive lock on the obj parameter.

Der Thread, der die Sperre für das angegebene Objekt zurzeit besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann.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. Der Aufrufer ist blockiert, während er darauf wartet, die Sperre erneut abzurufen.The caller is blocked while waiting to reacquire the lock. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.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.

Das Timeout stellt sicher, dass der aktuelle Thread nicht unbegrenzt blockiert wird, wenn ein anderer Thread die Sperre freigibt, Pulse ohne PulseAll zuerst die-oder die-Methode aufrufen zu muss.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. Außerdem wird der Thread in die Warteschlange für die Warteschlange verschoben, sodass andere Threads vor ihm in der Warteschlange umgangen werden, damit die Sperre früher wieder hergestellt werden kann.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. Der Thread kann den Rückgabewert der Wait Methode testen, um zu bestimmen, ob die Sperre vor dem Timeout erneut abgerufen wurde. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in den warte Vorgang gelangt Wait , und die Methode gegebenenfalls erneut aufzurufen.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.

Wenn ein Thread aufruft Wait, gibt er die Sperre für das Objekt frei und wechselt in die Warteschlange des Objekts.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. Der nächste Thread in der Ready-Warteschlange des-Objekts (sofern vorhanden) erhält die Sperre und verfügt über eine exklusive Verwendung des-Objekts.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Der Thread, der Wait aufgerufen hat PulseAll, verbleibt in der Warteschlange, bis entweder ein Thread, der die Sperre besitzt, oder der nächste in der Warteschlange ist, und ein PulseThread, der die Sperre aufruft.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. Wenn millisecondsTimeout jedoch abläuft, bevor ein anderer Thread die-Methode oder Pulse PulseAll die-Methode dieses Objekts aufruft, wird der ursprüngliche Thread in die bereite Warteschlange verschoben, um die Sperre wiederherzustellen.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.

Hinweis

Wenn Infinite für den millisecondsTimeout -Parameter angegeben wird, blockiert diese Methode unbegrenzt, es sei denn, der Pulse Inhaber PulseAllder Sperre ruft oder auf.If Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. Wenn millisecondsTimeout gleich 0 ist, gibt der Thread Wait , der aufruft, die Sperre frei und wechselt dann sofort in die bereite Warteschlange, um die Sperre wiederherzustellen.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.

Der Aufrufer wird einmal ausgeführt Wait , unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Konzeptionell speichert die Wait -Methode die Anzahl der Aufrufe, die der Enter Aufrufer für das Exit Objekt aufgerufen hat, und ruft so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben.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. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen.The caller then blocks while waiting to reacquire the object. Wenn der Aufrufer die Sperre erneut erhält, ruft Enter das System so oft wie nötig auf, um Enter die gespeicherte Anzahl für den Aufrufer wiederherzustellen.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Beim Wait Aufrufen von wird nur die Sperre für das angegebene Objekt freigegeben. wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.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.

Hinweis

Ein synchronisiertes Objekt enthält mehrere Verweise, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die bereit sind, die Sperre abzurufen, und einen Verweis auf die Warteschlange, die das Threads, die auf eine Benachrichtigung über eine Änderung des Objekt Zustands warten.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.

Die PulseMethoden PulseAll, undWait müssen in einem synchronisierten Codeblock aufgerufen werden.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Die Hinweise für die Pulse -Methode erläutern, was Pulse geschieht, wenn aufgerufen wird, wenn keine Threads warten.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Siehe auch

Wait(Object, TimeSpan)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.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

Parameter

obj
Object

Das Objekt, auf das gewartet werden soll.The object on which to wait.

timeout
TimeSpan

Ein TimeSpan, der die Zeit angibt, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.A TimeSpan representing the amount of time to wait before the thread enters the ready queue.

Gibt zurück

true, wenn die Sperre erneut erhalten wurde, bevor die angegebene Zeitspanne verstrichen ist. false, wenn die Sperre erneut erhalten wurde, nachdem die angegebene Zeitspanne verstrichen ist.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.The method does not return until the lock is reacquired.

Ausnahmen

Der obj-Parameter ist null.The obj parameter is null.

Der aufrufende Thread besitzt keine Sperre für das angegebene Objekt.The calling thread does not own the lock for the specified object.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen.The thread that invokes Wait is later interrupted from the waiting state. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.This happens when another thread calls this thread's Interrupt() method.

Der Wert des timeout-Parameters in Millisekunden ist negativ und stellt nicht Infinite (–1 Millisekunde) dar, oder er ist größer als MaxValue.The value of the timeout parameter in milliseconds is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

Hinweise

Diese Methode gibt erst dann zurück, wenn Sie eine exklusive Sperre für den obj -Parameter erhält.This method does not return until it reacquires an exclusive lock on the obj parameter.

Der Thread, der die Sperre für das angegebene Objekt zurzeit besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann.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. Der Aufrufer ist blockiert, während er darauf wartet, die Sperre erneut abzurufen.The caller is blocked while waiting to reacquire the lock. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.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.

Das Timeout stellt sicher, dass der aktuelle Thread nicht unbegrenzt blockiert wird, wenn ein anderer Thread die Sperre freigibt, Pulse ohne PulseAll zuerst die-oder die-Methode aufrufen zu muss.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. Außerdem wird der Thread in die Warteschlange für die Warteschlange verschoben, sodass andere Threads vor ihm in der Warteschlange umgangen werden, damit die Sperre früher wieder hergestellt werden kann.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. Der Thread kann den Rückgabewert der Wait Methode testen, um zu bestimmen, ob die Sperre vor dem Timeout erneut abgerufen wurde. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in den warte Vorgang gelangt Wait , und die Methode gegebenenfalls erneut aufzurufen.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.

Wenn ein Thread aufruft Wait, gibt er die Sperre für das Objekt frei und wechselt in die Warteschlange des Objekts.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. Der nächste Thread in der Ready-Warteschlange des-Objekts (sofern vorhanden) erhält die Sperre und verfügt über eine exklusive Verwendung des-Objekts.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. Der Thread, der Wait aufgerufen hat PulseAll, verbleibt in der Warteschlange, bis entweder ein Thread, der die Sperre besitzt, oder der nächste in der Warteschlange ist, und ein PulseThread, der die Sperre aufruft.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. Wenn timeout jedoch abläuft, bevor ein anderer Thread die-Methode oder Pulse PulseAll die-Methode dieses Objekts aufruft, wird der ursprüngliche Thread in die bereite Warteschlange verschoben, um die Sperre wiederherzustellen.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.

Hinweis

Wenn eine TimeSpan -1 Millisekunde für den timeout -Parameter angegeben wird, blockiert diese Methode unbegrenzt, es sei denn, der Inhaber Pulse der PulseAllSperre ruft oder auf.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. Wenn timeout 0 Millisekunden beträgt, gibt der Thread, Wait der aufruft, die Sperre frei und wechselt dann sofort in die bereite Warteschlange, um die Sperre wiederherzustellen.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.

Der Aufrufer wird einmal ausgeführt Wait , unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Konzeptionell speichert die Wait -Methode die Anzahl der Aufrufe, die der Enter Aufrufer für das Exit Objekt aufgerufen hat, und ruft so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben.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. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen.The caller then blocks while waiting to reacquire the object. Wenn der Aufrufer die Sperre erneut erhält, ruft Enter das System so oft wie nötig auf, um Enter die gespeicherte Anzahl für den Aufrufer wiederherzustellen.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Beim Wait Aufrufen von wird nur die Sperre für das angegebene Objekt freigegeben. wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.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.

Hinweis

Ein synchronisiertes Objekt enthält mehrere Verweise, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die bereit sind, die Sperre abzurufen, und einen Verweis auf die Warteschlange, die das Threads, die auf eine Benachrichtigung über eine Änderung des Objekt Zustands warten.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.

Die PulseMethoden PulseAll, undWait müssen in einem synchronisierten Codeblock aufgerufen werden.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Die Hinweise für die Pulse -Methode erläutern, was Pulse geschieht, wenn aufgerufen wird, wenn keine Threads warten.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Siehe auch

Wait(Object, TimeSpan, Boolean)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.Releases the lock on an object and blocks the current thread until it reacquires the lock. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.If the specified time-out interval elapses, the thread enters the ready queue. Beendet vor dem Warten optional auch die Synchronisierungsdomäne für den synchronisierten Kontext und erhält die Domäne anschließend wieder.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

Parameter

obj
Object

Das Objekt, auf das gewartet werden soll.The object on which to wait.

timeout
TimeSpan

Ein TimeSpan, der die Zeit angibt, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.A TimeSpan representing the amount of time to wait before the thread enters the ready queue.

exitContext
Boolean

true, um die Synchronisierungsdomäne für den Kontext (sofern ein synchronisierter Kontext vorliegt) vor dem Wartevorgang zu beenden und erneut zu erhalten, andernfalls false.true to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

Gibt zurück

true, wenn die Sperre erneut erhalten wurde, bevor die angegebene Zeitspanne verstrichen ist. false, wenn die Sperre erneut erhalten wurde, nachdem die angegebene Zeitspanne verstrichen ist.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.The method does not return until the lock is reacquired.

Ausnahmen

Der obj-Parameter ist null.The obj parameter is null.

Wait wird nicht aus einem synchronisierten Codeblock aufgerufen.Wait is not invoked from within a synchronized block of code.

Der Thread, der „Wait“ aufruft, wird später im Wartezustand unterbrochen.The thread that invokes Wait is later interrupted from the waiting state. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.This happens when another thread calls this thread's Interrupt() method.

Der timeout-Parameter ist negativ und stellt nicht Infinite dar (–1 Millisekunde), oder er ist größer als MaxValue.The timeout parameter is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

Hinweise

Diese Methode gibt erst dann zurück, wenn Sie eine exklusive Sperre für den obj -Parameter erhält.This method does not return until it reacquires an exclusive lock on the obj parameter.

Der Thread, der die Sperre für das angegebene Objekt zurzeit besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann.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. Der Aufrufer ist blockiert, während er darauf wartet, die Sperre erneut abzurufen.The caller is blocked while waiting to reacquire the lock. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.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.

Das Timeout stellt sicher, dass der aktuelle Thread nicht unbegrenzt blockiert wird, wenn ein anderer Thread die Sperre freigibt, Pulse ohne PulseAll zuerst die-oder die-Methode aufrufen zu muss.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. Außerdem wird der Thread in die Warteschlange für die Warteschlange verschoben, sodass andere Threads vor ihm in der Warteschlange umgangen werden, damit die Sperre früher wieder hergestellt werden kann.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. Der Thread kann den Rückgabewert der Wait Methode testen, um zu bestimmen, ob die Sperre vor dem Timeout erneut abgerufen wurde. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in den warte Vorgang gelangt Wait , und die Methode gegebenenfalls erneut aufzurufen.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.

Wenn ein Thread aufruft Wait, gibt er die Sperre frei und wechselt in die Warteschlange.When a thread calls Wait, it releases the lock and enters the waiting queue. An diesem Punkt kann der nächste Thread in der Warteschlange (sofern vorhanden) die Kontrolle über die Sperre übernehmen.At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. Der Thread, der Wait aufgerufen hat PulseAll, verbleibt in der Warteschlange, bis entweder ein Thread, der die Sperre besitzt, oder der nächste in der Warteschlange ist, und ein PulseThread, der die Sperre aufruft.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. Wenn timeout jedoch Millisekunden vergehen, bevor ein anderer Thread die-oder PulseAll - Pulse Methode dieses Objekts aufruft, wird der ursprüngliche Thread in die bereite Warteschlange verschoben, um die Sperre wiederherzustellen.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.

Hinweis

Wenn eine TimeSpan -1 Millisekunde für den timeout -Parameter angegeben wird, blockiert diese Methode unbegrenzt, es sei denn, der Inhaber Pulse der PulseAllSperre ruft oder auf.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. Wenn timeout 0 Millisekunden beträgt, gibt der Thread, Wait der aufruft, die Sperre frei und wechselt dann sofort in die bereite Warteschlange, um die Sperre wiederherzustellen.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.

Der Aufrufer wird einmal ausgeführt Wait , unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. Konzeptionell speichert die Wait -Methode die Anzahl der Aufrufe, die der Enter Aufrufer für das Exit Objekt aufgerufen hat, und ruft so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben.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. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen.The caller then blocks while waiting to reacquire the object. Wenn der Aufrufer die Sperre erneut erhält, ruft Enter das System so oft wie nötig auf, um Enter die gespeicherte Anzahl für den Aufrufer wiederherzustellen.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. Beim Wait Aufrufen von wird nur die Sperre für das angegebene Objekt freigegeben. wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.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.

Hinweis

Ein synchronisiertes Objekt enthält mehrere Verweise, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die bereit sind, die Sperre abzurufen, und einen Verweis auf die Warteschlange, die das Threads, die auf eine Benachrichtigung über eine Änderung des Objekt Zustands warten.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.

Die PulseMethoden PulseAll, undWait müssen in einem synchronisierten Codeblock aufgerufen werden.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Die Hinweise für die Pulse -Methode erläutern, was Pulse geschieht, wenn aufgerufen wird, wenn keine Threads warten.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

Hinweise zum Beenden des KontextsNotes on Exiting the Context

DerexitContext -Parameter hat keine Auswirkung, Wait es sei denn, die-Methode wird in einem nicht standardmäßigen verwalteten Kontext aufgerufen.TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. Dies kann vorkommen, wenn sich der Thread innerhalb eines Aufrufes einer Instanz einer von ContextBoundObjectabgeleiteten Klasse befindet.This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. Auch wenn Sie derzeit eine Methode für eine Klasse ausführen, die nicht von ContextBoundObjectabgeleitet ist String, können Sie sich in einem nicht standardmäßigen Kontext befinden, wenn ContextBoundObject sich ein auf dem Stapel in der aktuellen Anwendungsdomäne befindet.Even 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.

Wenn Ihr Code in einem nicht standardmäßigen Kontext ausgeführt wird, true bewirkt exitContext die Angabe von for, dass der Thread den nicht standardmäßigen verwalteten Kontext verlässt (d. h., um zum Standard Wait Kontext zu wechseln), bevor die-Methode ausgeführt wird.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. Sie kehrt zum ursprünglichen, nicht standardmäßigen Kontext zurück, nachdem der Wait -Vorgang abgeschlossen wurde.It returns to the original nondefault context after the call to the Wait method completes.

Dies kann hilfreich sein, wenn die Kontext gebundene Klasse über das SynchronizationAttribute -Attribut verfügt.This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. In diesem Fall werden alle Aufrufe an Member der-Klasse automatisch synchronisiert, und die Synchronisierungs Domäne ist der gesamte Code Körper für die-Klasse.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. Wenn Code in der Aufruf Stapel eines Members die Wait -Methode aufruft und für true exitContextangibt, beendet der Thread die Synchronisierungs Domäne, sodass ein Thread, der bei einem Aufruf von einem beliebigen Member des-Objekts blockiert ist, fortgesetzt werden kann.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. Wenn die Wait -Methode zurückgibt, muss der Thread, der den-Befehl erstellt hat, warten, bis die Synchronisierungs Domäne erneut eingegeben wirdWhen the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

Siehe auch

Gilt für: