ThreadPool.UnsafeRegisterWaitForSingleObject Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Registriert einen Delegaten, damit auf ein WaitHandle gewartet wird. Die Aufrufliste wird jedoch nicht an den Arbeitsthread weitergeleitet.
Überlädt
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) |
Registriert einen Delegaten, der auf ein WaitHandle wartet, und gibt einen TimeSpan-Wert für das Timeout an. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) |
Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl mit Vorzeichen verwendet wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) |
Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 64-Bit-Ganzzahl mit Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) |
Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl ohne Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
Registriert einen Delegaten, der auf ein WaitHandle wartet, und gibt einen TimeSpan-Wert für das Timeout an. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, TimeSpan timeout, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, TimeSpan timeout, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, timeout As TimeSpan, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parameter
- waitObject
- WaitHandle
Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.
- callBack
- WaitOrTimerCallback
Der Delegat, der aufgerufen werden soll, wenn der waitObject
-Parameter signalisiert wird.
- state
- Object
Das an den Delegaten übergebene Objekt.
- timeout
- TimeSpan
Das durch eine TimeSpan dargestellte Timeout. Wenn timeout
den Wert 0 (null) hat, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn timeout
den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.
- executeOnlyOnce
- Boolean
true
, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject
-Parameter warten soll. false
, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.
Gibt zurück
Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.
- Attribute
Ausnahmen
Der timeout
-Parameter ist kleiner als -1.
Der timeout
Parameter ist größer als Int32.MaxValue.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Hinweise
Im Gegensatz zur RegisterWaitForSingleObject -Methode UnsafeRegisterWaitForSingleObject wird der aufrufende Stapel nicht an den Workerthread weitergegeben. Dadurch kann Code den aufrufenden Stapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.
Achtung
Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich eine Sicherheitslücke öffnen. Die Codezugriffssicherheit basiert bei ihren Berechtigungsprüfungen auf den Berechtigungen aller Aufrufer auf dem Stapel. Wenn die Arbeit für einen Threadpoolthread mit UnsafeRegisterWaitForSingleObjectin die Warteschlange gestellt wird, hat der Stapel des Threadpoolthreads nicht den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies möglicherweise ausnutzen, um Berechtigungsprüfungen zu vermeiden.
Die Verwendung eines Mutex for waitObject
bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standardflag WT_EXECUTEDEFAULT
verwendet, sodass jeder Rückruf für einen separaten Threadpoolthread gesendet wird.
Wenn Sie die RegisteredWaitHandle von dieser Methode zurückgegebene Methode verwendet haben, rufen Sie deren RegisteredWaitHandle.Unregister Methode auf, um Verweise auf das Wartehandle freizugeben. Es wird empfohlen, die RegisteredWaitHandle.Unregister -Methode immer aufzurufen, auch wenn Sie für executeOnlyOnce
angebentrue
. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister -Methode aufrufen, anstatt vom Finalizer des registrierten Wartehandles abhängig zu sein.
Weitere Informationen
Gilt für:
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl mit Vorzeichen verwendet wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Integer, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parameter
- waitObject
- WaitHandle
Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.
- callBack
- WaitOrTimerCallback
Der Delegat, der aufgerufen werden soll, wenn der waitObject
-Parameter signalisiert wird.
- state
- Object
Das an den Delegaten übergebene Objekt.
- millisecondsTimeOutInterval
- Int32
Das Timeout in Millisekunden. Wenn der millisecondsTimeOutInterval
-Parameter 0 (null) ist, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn millisecondsTimeOutInterval
den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.
- executeOnlyOnce
- Boolean
true
, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject
-Parameter warten soll. false
, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.
Gibt zurück
Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.
- Attribute
Ausnahmen
Der millisecondsTimeOutInterval
-Parameter ist kleiner als -1.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Hinweise
Im Gegensatz zur RegisterWaitForSingleObject -Methode UnsafeRegisterWaitForSingleObject wird der aufrufende Stapel nicht an den Workerthread weitergegeben. Dadurch kann Code den aufrufenden Stapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.
Achtung
Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich eine Sicherheitslücke öffnen. Die Codezugriffssicherheit basiert bei ihren Berechtigungsprüfungen auf den Berechtigungen aller Aufrufer auf dem Stapel. Wenn die Arbeit für einen Threadpoolthread mit UnsafeRegisterWaitForSingleObjectin die Warteschlange gestellt wird, hat der Stapel des Threadpoolthreads nicht den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies möglicherweise ausnutzen, um Berechtigungsprüfungen zu vermeiden.
Die Verwendung eines Mutex for waitObject
bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standardflag WT_EXECUTEDEFAULT
verwendet, sodass jeder Rückruf für einen separaten Threadpoolthread gesendet wird.
Wenn Sie die RegisteredWaitHandle von dieser Methode zurückgegebene Methode verwendet haben, rufen Sie deren RegisteredWaitHandle.Unregister Methode auf, um Verweise auf das Wartehandle freizugeben. Es wird empfohlen, die RegisteredWaitHandle.Unregister -Methode immer aufzurufen, auch wenn Sie für executeOnlyOnce
angebentrue
. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister -Methode aufrufen, anstatt vom Finalizer des registrierten Wartehandles abhängig zu sein.
Weitere Informationen
Gilt für:
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 64-Bit-Ganzzahl mit Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Long, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parameter
- waitObject
- WaitHandle
Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.
- callBack
- WaitOrTimerCallback
Der Delegat, der aufgerufen werden soll, wenn der waitObject
-Parameter signalisiert wird.
- state
- Object
Das an den Delegaten übergebene Objekt.
- millisecondsTimeOutInterval
- Int64
Das Timeout in Millisekunden. Wenn der millisecondsTimeOutInterval
-Parameter 0 (null) ist, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn millisecondsTimeOutInterval
den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.
- executeOnlyOnce
- Boolean
true
, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject
-Parameter warten soll. false
, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.
Gibt zurück
Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.
- Attribute
Ausnahmen
Der millisecondsTimeOutInterval
-Parameter ist kleiner als -1.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Hinweise
Im Gegensatz zur RegisterWaitForSingleObject -Methode UnsafeRegisterWaitForSingleObject wird der aufrufende Stapel nicht an den Workerthread weitergegeben. Dadurch kann Code den aufrufenden Stapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.
Achtung
Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich eine Sicherheitslücke öffnen. Die Codezugriffssicherheit basiert bei ihren Berechtigungsprüfungen auf den Berechtigungen aller Aufrufer auf dem Stapel. Wenn die Arbeit für einen Threadpoolthread mit UnsafeRegisterWaitForSingleObjectin die Warteschlange gestellt wird, hat der Stapel des Threadpoolthreads nicht den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies möglicherweise ausnutzen, um Berechtigungsprüfungen zu vermeiden.
Die Verwendung eines Mutex for waitObject
bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standardflag WT_EXECUTEDEFAULT
verwendet, sodass jeder Rückruf für einen separaten Threadpoolthread gesendet wird.
Wenn Sie die RegisteredWaitHandle von dieser Methode zurückgegebene Methode verwendet haben, rufen Sie deren RegisteredWaitHandle.Unregister Methode auf, um Verweise auf das Wartehandle freizugeben. Es wird empfohlen, die RegisteredWaitHandle.Unregister -Methode immer aufzurufen, auch wenn Sie für executeOnlyOnce
angebentrue
. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister -Methode aufrufen, anstatt vom Finalizer des registrierten Wartehandles abhängig zu sein.
Weitere Informationen
Gilt für:
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
- Quelle:
- ThreadPoolWorkQueue.cs
Wichtig
Diese API ist nicht CLS-kompatibel.
Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl ohne Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, System::UInt32 millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
[<System.CLSCompliant(false)>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As UInteger, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parameter
- waitObject
- WaitHandle
Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.
- callBack
- WaitOrTimerCallback
Der Delegat, der aufgerufen werden soll, wenn der waitObject
-Parameter signalisiert wird.
- state
- Object
Das an den Delegaten übergebene Objekt.
- millisecondsTimeOutInterval
- UInt32
Das Timeout in Millisekunden. Wenn der millisecondsTimeOutInterval
-Parameter 0 (null) ist, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn millisecondsTimeOutInterval
den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.
- executeOnlyOnce
- Boolean
true
, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject
-Parameter warten soll. false
, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.
Gibt zurück
Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.
- Attribute
Ausnahmen
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Hinweise
Im Gegensatz zur RegisterWaitForSingleObject -Methode UnsafeRegisterWaitForSingleObject wird der aufrufende Stapel nicht an den Workerthread weitergegeben. Dadurch kann Code den aufrufenden Stapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.
Achtung
Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich eine Sicherheitslücke öffnen. Die Codezugriffssicherheit basiert bei ihren Berechtigungsprüfungen auf den Berechtigungen aller Aufrufer auf dem Stapel. Wenn die Arbeit für einen Threadpoolthread mit UnsafeRegisterWaitForSingleObjectin die Warteschlange gestellt wird, hat der Stapel des Threadpoolthreads nicht den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies möglicherweise ausnutzen, um Berechtigungsprüfungen zu vermeiden.
Die Verwendung eines Mutex for waitObject
bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standardflag WT_EXECUTEDEFAULT
verwendet, sodass jeder Rückruf für einen separaten Threadpoolthread gesendet wird.
Wenn Sie die RegisteredWaitHandle von dieser Methode zurückgegebene Methode verwendet haben, rufen Sie deren RegisteredWaitHandle.Unregister Methode auf, um Verweise auf das Wartehandle freizugeben. Es wird empfohlen, die RegisteredWaitHandle.Unregister -Methode immer aufzurufen, auch wenn Sie für executeOnlyOnce
angebentrue
. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister -Methode aufrufen, anstatt vom Finalizer des registrierten Wartehandles abhängig zu sein.