Teilen über


Monitor.Wait Methode

Definition

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.

Ü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. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein. 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.

Wait(Object)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.

Wait(Object, Int32)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.

Wait(Object, TimeSpan)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.

Wait(Object, TimeSpan, Boolean)

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein. Beendet vor dem Warten optional auch die Synchronisierungsdomäne für den synchronisierten Kontext und erhält die Domäne anschließend wieder.

Wait(Object, Int32, Boolean)

Quelle:
Monitor.cs
Quelle:
Monitor.cs
Quelle:
Monitor.cs

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein. 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.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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.

millisecondsTimeout
Int32

Die Anzahl von Millisekunden, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.

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.

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. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.

Attribute

Ausnahmen

Der obj-Parameter ist null.

Wait wird nicht aus einem synchronisierten Codeblock aufgerufen.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.

Der Wert des millisecondsTimeout-Parameters ist negativ und ungleich Infinite.

Hinweise

Weitere Informationen zu dieser API finden Sie unter Ergänzende API-Hinweise für Monitor.Wait.

Weitere Informationen

Gilt für:

Wait(Object)

Quelle:
Monitor.cs
Quelle:
Monitor.cs
Quelle:
Monitor.cs

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait (object obj);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj);
static member Wait : obj -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

Parameter

obj
Object

Das Objekt, auf das gewartet werden soll.

Gibt zurück

true, wenn der Aufruf beendet wurde, weil der Aufrufer die Sperre für das angegebene Objekt erneut erhalten hat. Diese Methode wird nicht beendet, wenn die Sperre nicht erneut erhalten wird.

Attribute

Ausnahmen

Der obj-Parameter ist null.

Der aufrufende Thread besitzt keine Sperre für das angegebene Objekt.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.

Hinweise

Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um das Objekt freizugeben, sodass ein anderer Thread darauf zugreifen kann. Der Aufrufer wird blockiert, während er darauf wartet, die Sperre erneut zu erhalten. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.

Wenn ein Thread aufruft Wait, löst er die Sperre für das Objekt auf und wechselt in die wartewarteschlange des Objekts. Der nächste Thread in der bereiten Warteschlange des Objekts (sofern vorhanden) ruft die Sperre ab und verwendet das Objekt exklusiv. Alle Threads, die aufrufen Wait , verbleiben in der wartenden Warteschlange, bis sie ein Signal von Pulse oder PulseAllempfangen, das vom Besitzer der Sperre gesendet wird. Wenn Pulse gesendet wird, ist nur der Thread am Anfang der wartenden Warteschlange betroffen. Wenn PulseAll gesendet wird, sind alle Threads betroffen, die auf das Objekt warten. Wenn das Signal empfangen wird, verlassen mindestens ein Thread die wartenden Warteschlange und gelangen in die bereite Warteschlange. Ein Thread in der bereiten Warteschlange kann die Sperre erneut abrufen.

Diese Methode gibt zurück, wenn der aufrufende Thread die Sperre für das -Objekt erneut erzwingt. Beachten Sie, dass diese Methode unbegrenzt blockiert wird, wenn der Halter der Sperre nicht oder PulseAllaufruftPulse.

Der Aufrufer wird Wait einmal ausgeführt, unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde. Konzeptionell speichert die Wait Methode die Häufigkeit, mit der der Aufrufer für das Objekt aufgerufen wird Enter , und ruft Exit so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen. Wenn der Aufrufer die Sperre erneut erzwingt, ruft Enter das System so oft wie nötig auf, um die gespeicherte Enter Anzahl für den Aufrufer wiederherzustellen. Durch aufrufen Wait wird die Sperre nur für das angegebene Objekt freigegeben. Wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.

Beachten Sie, dass ein synchronisiertes Objekt mehrere Verweise enthält, 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 zum Abrufen der Sperre bereit sind, und einen Verweis auf die wartenden Warteschlange, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung des Zustands des Objekts warten.

Die PulseMethoden , PulseAllund Wait müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.

In den Hinweisen für die Pulse -Methode wird erläutert, was geschieht, wenn Pulse aufgerufen wird, wenn keine Threads warten.

Weitere Informationen

Gilt für:

Wait(Object, Int32)

Quelle:
Monitor.CoreCLR.cs
Quelle:
Monitor.CoreCLR.cs
Quelle:
Monitor.CoreCLR.cs

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait (object obj, int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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.

millisecondsTimeout
Int32

Die Anzahl von Millisekunden, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.

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. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.

Attribute

Ausnahmen

Der obj-Parameter ist null.

Der aufrufende Thread besitzt keine Sperre für das angegebene Objekt.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.

Der Wert des millisecondsTimeout-Parameters ist negativ und ungleich Infinite.

Hinweise

Diese Methode gibt erst zurück, wenn sie erneut eine exklusive Sperre für den obj Parameter erhebt.

Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um das Objekt freizugeben, sodass ein anderer Thread darauf zugreifen kann. Der Aufrufer wird blockiert, während er darauf wartet, die Sperre erneut zu erhalten. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.

Durch das Timeout wird sichergestellt, dass der aktuelle Thread nicht unbegrenzt blockiert wird, wenn ein anderer Thread die Sperre freigibt, ohne zuvor die Pulse - oder PulseAll -Methode aufzurufen. Außerdem wird der Thread in die bereite Warteschlange verschoben, wobei andere Threads vor ihr in der Wartewarteschlange umgangen werden, sodass die Sperre früher erneut angefordert werden kann. Der Thread kann den Rückgabewert der Wait -Methode testen, um zu bestimmen, ob die Sperre vor dem Timeout erneut ausgeführt wurde. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in den Wartevorgang eintritt, und bei Bedarf die Wait -Methode erneut aufrufen.

Wenn ein Thread aufruft Wait, löst er die Sperre für das Objekt auf und wechselt in die wartewarteschlange des Objekts. Der nächste Thread in der bereiten Warteschlange des Objekts (sofern vorhanden) ruft die Sperre ab und verwendet das Objekt exklusiv. Der aufgerufene Thread verbleibt Wait in der wartenden Warteschlange, bis entweder ein Thread, der die Sperre enthält, aufruft PulseAll, oder es ist der nächste in der Warteschlange, und ein Thread, der die Sperre enthält, ruft auf Pulse. Wenn millisecondsTimeout jedoch verstrichen ist, bevor ein anderer Thread die -Methode oder PulseAll -PulseMethode dieses Objekts aufruft, wird der ursprüngliche Thread in die bereite Warteschlange verschoben, um die Sperre wiederzuerlangen.

Hinweis

Wenn Infinite für den millisecondsTimeout -Parameter angegeben ist, wird diese Methode auf unbestimmte Zeit blockiert, es sei denn, der Inhaber der Sperre ruft oder PulseAllaufPulse. Wenn millisecondsTimeout gleich 0 ist, gibt der Thread, der aufruft Wait , die Sperre frei und wechselt dann sofort in die bereite Warteschlange, um die Sperre wiederzuerlangen.

Der Aufrufer wird Wait einmal ausgeführt, unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde. Konzeptionell speichert die Wait Methode die Häufigkeit, mit der der Aufrufer für das Objekt aufgerufen wird Enter , und ruft Exit so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen. Wenn der Aufrufer die Sperre erneut erzwingt, ruft Enter das System so oft wie nötig auf, um die gespeicherte Enter Anzahl für den Aufrufer wiederherzustellen. Durch aufrufen Wait wird die Sperre nur für das angegebene Objekt freigegeben. Wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.

Hinweis

Ein synchronisiertes Objekt enthält mehrere Verweise, darunter einen Verweis auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, und einen Verweis auf die wartenden Warteschlange, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung des Zustands des Objekts warten.

Die PulseMethoden , PulseAllund Wait müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.

In den Hinweisen für die Pulse -Methode wird erläutert, was geschieht, wenn Pulse aufgerufen wird, wenn keine Threads warten.

Weitere Informationen

Gilt für:

Wait(Object, TimeSpan)

Quelle:
Monitor.cs
Quelle:
Monitor.cs
Quelle:
Monitor.cs

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait (object obj, TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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.

timeout
TimeSpan

Ein TimeSpan, der die Zeit angibt, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.

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. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.

Attribute

Ausnahmen

Der obj-Parameter ist null.

Der aufrufende Thread besitzt keine Sperre für das angegebene Objekt.

Der Thread, der Wait aufruft, wird später im Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.

Der Wert des timeout Parameters in Millisekunden ist negativ und stellt Infinite nicht dar (-1 Millisekunde) oder ist größer als Int32.MaxValue.

Hinweise

Diese Methode gibt erst zurück, wenn sie erneut eine exklusive Sperre für den obj Parameter erhebt.

Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um das Objekt freizugeben, sodass ein anderer Thread darauf zugreifen kann. Der Aufrufer wird blockiert, während er darauf wartet, die Sperre erneut zu erhalten. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die als Ergebnis der Vorgänge eines anderen Threads auftritt.

Durch das Timeout wird sichergestellt, dass der aktuelle Thread nicht unbegrenzt blockiert wird, wenn ein anderer Thread die Sperre freigibt, ohne zuvor die Pulse - oder PulseAll -Methode aufzurufen. Außerdem wird der Thread in die bereite Warteschlange verschoben, wobei andere Threads vor ihr in der Wartewarteschlange umgangen werden, sodass die Sperre früher erneut angefordert werden kann. Der Thread kann den Rückgabewert der Wait -Methode testen, um zu bestimmen, ob die Sperre vor dem Timeout erneut ausgeführt wurde. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in den Wartevorgang eintritt, und bei Bedarf die Wait -Methode erneut aufrufen.

Wenn ein Thread aufruft Wait, löst er die Sperre für das Objekt auf und wechselt in die wartewarteschlange des Objekts. Der nächste Thread in der bereiten Warteschlange des Objekts (sofern vorhanden) ruft die Sperre ab und verwendet das Objekt exklusiv. Der aufgerufene Thread verbleibt Wait in der wartenden Warteschlange, bis entweder ein Thread, der die Sperre enthält, aufruft PulseAll, oder es ist der nächste in der Warteschlange, und ein Thread, der die Sperre enthält, ruft auf Pulse. Wenn timeout jedoch verstrichen ist, bevor ein anderer Thread die -Methode oder PulseAll -PulseMethode dieses Objekts aufruft, wird der ursprüngliche Thread in die bereite Warteschlange verschoben, um die Sperre wiederzuerlangen.

Hinweis

Wenn für den timeout -Parameter eine TimeSpan -1 Millisekunde angegeben wird, wird diese Methode auf unbestimmte Zeit blockiert, es sei denn, der Inhaber der Sperre ruft oder PulseAllaufPulse. Wenn timeout 0 Millisekunden ist, gibt der Thread, der aufruft Wait , die Sperre frei und wechselt dann sofort in die bereite Warteschlange, um die Sperre wiederzuerlangen.

Der Aufrufer wird Wait einmal ausgeführt, unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde. Konzeptionell speichert die Wait Methode die Häufigkeit, mit der der Aufrufer für das Objekt aufgerufen wird Enter , und ruft Exit so oft wie nötig auf, um das gesperrte Objekt vollständig freizugeben. Der Aufrufer blockiert dann, während er darauf wartet, das Objekt erneut abzurufen. Wenn der Aufrufer die Sperre erneut erzwingt, ruft Enter das System so oft wie nötig auf, um die gespeicherte Enter Anzahl für den Aufrufer wiederherzustellen. Durch aufrufen Wait wird die Sperre nur für das angegebene Objekt freigegeben. Wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.

Hinweis

Ein synchronisiertes Objekt enthält mehrere Verweise, darunter einen Verweis auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, und einen Verweis auf die wartenden Warteschlange, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung des Zustands des Objekts warten.

Die PulseMethoden , PulseAllund Wait müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.

In den Hinweisen für die Pulse -Methode wird erläutert, was geschieht, wenn Pulse aufgerufen wird, wenn keine Threads warten.

Weitere Informationen

Gilt für:

Wait(Object, TimeSpan, Boolean)

Quelle:
Monitor.cs
Quelle:
Monitor.cs
Quelle:
Monitor.cs

Hebt die Sperre für ein Objekt auf und blockiert den aktuellen Thread, bis er die Sperre erneut erhält. Wenn das angegebene Timeoutintervall abläuft, tritt der Thread in die Warteschlange für abgearbeitete Threads ein. Beendet vor dem Warten optional auch die Synchronisierungsdomäne für den synchronisierten Kontext und erhält die Domäne anschließend wieder.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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.

timeout
TimeSpan

Ein TimeSpan, der die Zeit angibt, die gewartet wird, bevor der Thread in die Warteschlange für abgearbeitete Threads eintritt.

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.

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. Die Methode wird erst beendet, wenn die Sperre erneut erhalten wurde.

Attribute

Ausnahmen

Der obj-Parameter ist null.

Wait wird nicht aus einem synchronisierten Codeblock aufgerufen.

Der Thread, der „Wait“ aufruft, wird später im Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Interrupt()-Methode dieses Threads aufruft.

Der timeout Parameter ist negativ und stellt Infinite nicht (-1 Millisekunde) dar oder ist größer als Int32.MaxValue.

Hinweise

Weitere Informationen zu dieser API finden Sie unter Ergänzende API-Hinweise für Monitor.Wait.

Weitere Informationen

Gilt für: