ThreadPool.UnsafeRegisterWaitForSingleObject Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Rejestruje delegata do oczekiwania na WaitHandleelement , ale nie propaguje stosu wywołującego do wątku roboczego.
Przeciążenia
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) |
Rejestruje delegata do oczekiwania na WaitHandlewartość , określając TimeSpan wartość limitu czasu. Ta metoda nie propaguje stosu wywołującego do wątku roboczego. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) |
Rejestruje delegata do oczekiwania na WaitHandlewartość , używając 32-bitowej liczby całkowitej podpisanej przez limit czasu w milisekundach. Ta metoda nie propaguje stosu wywołującego do wątku roboczego. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) |
Rejestruje delegata do oczekiwania na WaitHandlewartość , określając 64-bitową liczbę całkowitą podpisaną dla limitu czasu w milisekundach. Ta metoda nie propaguje stosu wywołującego do wątku roboczego. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) |
Rejestruje delegata do oczekiwania na WaitHandlewartość , określając 32-bitową liczbę całkowitą bez znaku dla limitu czasu w milisekundach. Ta metoda nie propaguje stosu wywołującego do wątku roboczego. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
Rejestruje delegata do oczekiwania na WaitHandlewartość , określając TimeSpan wartość limitu czasu. Ta metoda nie propaguje stosu wywołującego do wątku roboczego.
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
Parametry
- waitObject
- WaitHandle
Identyfikator do zarejestrowania WaitHandle . Użyj innego WaitHandle niż Mutex.
- callBack
- WaitOrTimerCallback
Delegat do wywołania, gdy waitObject
parametr jest zasygnalizowany.
- state
- Object
Obiekt przekazany do delegata.
- timeout
- TimeSpan
Limit czasu reprezentowany przez element TimeSpan. Jeśli timeout
wartość to 0 (zero), funkcja sprawdza stan obiektu i zwraca natychmiast. Jeśli timeout
wartość to -1, interwał limitu czasu funkcji nigdy nie upłynął.
- executeOnlyOnce
- Boolean
true
aby wskazać, że wątek nie będzie już czekać na waitObject
parametr po wywołaniu delegata; false
aby wskazać, że czasomierz jest resetowany za każdym razem, gdy operacja oczekiwania zakończy się aż do wyrejestrowania oczekiwania.
Zwraca
Obiekt RegisteredWaitHandle , którego można użyć do anulowania zarejestrowanej operacji oczekiwania.
- Atrybuty
Wyjątki
Parametr timeout
jest mniejszy niż -1.
Parametr timeout
jest większy niż Int32.MaxValue.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Uwagi
RegisterWaitForSingleObject W przeciwieństwie do metody UnsafeRegisterWaitForSingleObject nie propaguje stosu wywołującego do wątku roboczego. Dzięki temu kod może utracić stos wywołań, a tym samym podnieść jego uprawnienia zabezpieczeń.
Przestroga
Użycie UnsafeRegisterWaitForSingleObject może przypadkowo otworzyć dziurę bezpieczeństwa. Zabezpieczenia dostępu do kodu bazują na jego uprawnieniach wszystkich wywołujących w stosie. Gdy praca jest w kolejce w wątku puli wątków przy użyciu metody UnsafeRegisterWaitForSingleObject, stos wątku puli wątków nie będzie mieć kontekstu rzeczywistych wywołujących. Złośliwy kod może wykorzystać ten kod, aby uniknąć kontroli uprawnień.
Użycie elementu Mutex for waitObject
nie zapewnia wzajemnego wykluczenia wywołań zwrotnych, ponieważ podstawowy interfejs API systemu Windows używa flagi domyślnej WT_EXECUTEDEFAULT
, więc każde wywołanie zwrotne jest wysyłane w osobnym wątku puli wątków.
Po zakończeniu RegisteredWaitHandle korzystania z metody zwracanej przez tę metodę wywołaj metodę , RegisteredWaitHandle.Unregister aby zwolnić odwołania do uchwytu oczekiwania. Zalecamy, aby zawsze wywoływać metodę RegisteredWaitHandle.Unregister , nawet jeśli określono true
wartość executeOnlyOnce
. Odzyskiwanie pamięci działa wydajniej, jeśli wywołasz metodę RegisteredWaitHandle.Unregister zamiast w zależności od finalizatora zarejestrowanego uchwytu oczekiwania.
Zobacz też
Dotyczy
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
Rejestruje delegata do oczekiwania na WaitHandlewartość , używając 32-bitowej liczby całkowitej podpisanej przez limit czasu w milisekundach. Ta metoda nie propaguje stosu wywołującego do wątku roboczego.
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
Parametry
- waitObject
- WaitHandle
Identyfikator do zarejestrowania WaitHandle . Użyj innego WaitHandle niż Mutex.
- callBack
- WaitOrTimerCallback
Delegat do wywołania, gdy waitObject
parametr jest zasygnalizowany.
- state
- Object
Obiekt przekazany do delegata.
- millisecondsTimeOutInterval
- Int32
Limit czasu w milisekundach.
millisecondsTimeOutInterval
Jeśli parametr ma wartość 0 (zero), funkcja sprawdza stan obiektu i zwraca natychmiast. Jeśli millisecondsTimeOutInterval
wartość to -1, interwał limitu czasu funkcji nigdy nie upłynął.
- executeOnlyOnce
- Boolean
true
aby wskazać, że wątek nie będzie już czekać na waitObject
parametr po wywołaniu delegata; false
aby wskazać, że czasomierz jest resetowany za każdym razem, gdy operacja oczekiwania zakończy się aż do wyrejestrowania oczekiwania.
Zwraca
Obiekt RegisteredWaitHandle , którego można użyć do anulowania zarejestrowanej operacji oczekiwania.
- Atrybuty
Wyjątki
Parametr millisecondsTimeOutInterval
jest mniejszy niż -1.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Uwagi
RegisterWaitForSingleObject W przeciwieństwie do metody UnsafeRegisterWaitForSingleObject nie propaguje stosu wywołującego do wątku roboczego. Dzięki temu kod może utracić stos wywołań, a tym samym podnieść jego uprawnienia zabezpieczeń.
Przestroga
Użycie UnsafeRegisterWaitForSingleObject może przypadkowo otworzyć dziurę bezpieczeństwa. Zabezpieczenia dostępu do kodu bazują na jego uprawnieniach wszystkich wywołujących w stosie. Gdy praca jest w kolejce w wątku puli wątków przy użyciu metody UnsafeRegisterWaitForSingleObject, stos wątku puli wątków nie będzie mieć kontekstu rzeczywistych wywołujących. Złośliwy kod może wykorzystać ten kod, aby uniknąć kontroli uprawnień.
Użycie elementu Mutex for waitObject
nie zapewnia wzajemnego wykluczenia wywołań zwrotnych, ponieważ podstawowy interfejs API systemu Windows używa flagi domyślnej WT_EXECUTEDEFAULT
, więc każde wywołanie zwrotne jest wysyłane w osobnym wątku puli wątków.
Po zakończeniu RegisteredWaitHandle korzystania z metody zwracanej przez tę metodę wywołaj metodę , RegisteredWaitHandle.Unregister aby zwolnić odwołania do uchwytu oczekiwania. Zalecamy, aby zawsze wywoływać metodę RegisteredWaitHandle.Unregister , nawet jeśli określono true
wartość executeOnlyOnce
. Odzyskiwanie pamięci działa wydajniej, jeśli wywołasz metodę RegisteredWaitHandle.Unregister zamiast w zależności od finalizatora zarejestrowanego uchwytu oczekiwania.
Zobacz też
Dotyczy
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
Rejestruje delegata do oczekiwania na WaitHandlewartość , określając 64-bitową liczbę całkowitą podpisaną dla limitu czasu w milisekundach. Ta metoda nie propaguje stosu wywołującego do wątku roboczego.
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
Parametry
- waitObject
- WaitHandle
Identyfikator do zarejestrowania WaitHandle . Użyj innego WaitHandle niż Mutex.
- callBack
- WaitOrTimerCallback
Delegat do wywołania, gdy waitObject
parametr jest zasygnalizowany.
- state
- Object
Obiekt przekazany do delegata.
- millisecondsTimeOutInterval
- Int64
Limit czasu w milisekundach.
millisecondsTimeOutInterval
Jeśli parametr ma wartość 0 (zero), funkcja sprawdza stan obiektu i zwraca natychmiast. Jeśli millisecondsTimeOutInterval
wartość to -1, interwał limitu czasu funkcji nigdy nie upłynął.
- executeOnlyOnce
- Boolean
true
aby wskazać, że wątek nie będzie już czekać na waitObject
parametr po wywołaniu delegata; false
aby wskazać, że czasomierz jest resetowany za każdym razem, gdy operacja oczekiwania zakończy się aż do wyrejestrowania oczekiwania.
Zwraca
Obiekt RegisteredWaitHandle , którego można użyć do anulowania zarejestrowanej operacji oczekiwania.
- Atrybuty
Wyjątki
Parametr millisecondsTimeOutInterval
jest mniejszy niż -1.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Uwagi
RegisterWaitForSingleObject W przeciwieństwie do metody UnsafeRegisterWaitForSingleObject nie propaguje stosu wywołującego do wątku roboczego. Dzięki temu kod może utracić stos wywołań, a tym samym podnieść jego uprawnienia zabezpieczeń.
Przestroga
Użycie UnsafeRegisterWaitForSingleObject może przypadkowo otworzyć dziurę bezpieczeństwa. Zabezpieczenia dostępu do kodu bazują na jego uprawnieniach wszystkich wywołujących w stosie. Gdy praca jest w kolejce w wątku puli wątków przy użyciu metody UnsafeRegisterWaitForSingleObject, stos wątku puli wątków nie będzie mieć kontekstu rzeczywistych wywołujących. Złośliwy kod może wykorzystać ten kod, aby uniknąć kontroli uprawnień.
Użycie elementu Mutex for waitObject
nie zapewnia wzajemnego wykluczenia wywołań zwrotnych, ponieważ podstawowy interfejs API systemu Windows używa flagi domyślnej WT_EXECUTEDEFAULT
, więc każde wywołanie zwrotne jest wysyłane w osobnym wątku puli wątków.
Po zakończeniu RegisteredWaitHandle korzystania z metody zwracanej przez tę metodę wywołaj metodę , RegisteredWaitHandle.Unregister aby zwolnić odwołania do uchwytu oczekiwania. Zalecamy, aby zawsze wywoływać metodę RegisteredWaitHandle.Unregister , nawet jeśli określono true
wartość executeOnlyOnce
. Odzyskiwanie pamięci działa wydajniej, jeśli wywołasz metodę RegisteredWaitHandle.Unregister zamiast w zależności od finalizatora zarejestrowanego uchwytu oczekiwania.
Zobacz też
Dotyczy
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
- Źródło:
- ThreadPoolWorkQueue.cs
Ważne
Ten interfejs API nie jest zgodny ze specyfikacją CLS.
Rejestruje delegata do oczekiwania na WaitHandlewartość , określając 32-bitową liczbę całkowitą bez znaku dla limitu czasu w milisekundach. Ta metoda nie propaguje stosu wywołującego do wątku roboczego.
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
Parametry
- waitObject
- WaitHandle
Identyfikator do zarejestrowania WaitHandle . Użyj innego WaitHandle niż Mutex.
- callBack
- WaitOrTimerCallback
Delegat do wywołania, gdy waitObject
parametr jest zasygnalizowany.
- state
- Object
Obiekt przekazany do delegata.
- millisecondsTimeOutInterval
- UInt32
Limit czasu w milisekundach.
millisecondsTimeOutInterval
Jeśli parametr ma wartość 0 (zero), funkcja sprawdza stan obiektu i zwraca natychmiast. Jeśli millisecondsTimeOutInterval
wartość to -1, interwał limitu czasu funkcji nigdy nie upłynął.
- executeOnlyOnce
- Boolean
true
aby wskazać, że wątek nie będzie już czekać na waitObject
parametr po wywołaniu delegata; false
aby wskazać, że czasomierz jest resetowany za każdym razem, gdy operacja oczekiwania zakończy się aż do wyrejestrowania oczekiwania.
Zwraca
Obiekt RegisteredWaitHandle , którego można użyć do anulowania zarejestrowanej operacji oczekiwania.
- Atrybuty
Wyjątki
Obiekt wywołujący nie posiada wymaganych uprawnień.
Uwagi
RegisterWaitForSingleObject W przeciwieństwie do metody UnsafeRegisterWaitForSingleObject nie propaguje stosu wywołującego do wątku roboczego. Dzięki temu kod może utracić stos wywołań, a tym samym podnieść jego uprawnienia zabezpieczeń.
Przestroga
Użycie UnsafeRegisterWaitForSingleObject może przypadkowo otworzyć dziurę bezpieczeństwa. Zabezpieczenia dostępu do kodu bazują na jego uprawnieniach wszystkich wywołujących w stosie. Gdy praca jest w kolejce w wątku puli wątków przy użyciu metody UnsafeRegisterWaitForSingleObject, stos wątku puli wątków nie będzie mieć kontekstu rzeczywistych wywołujących. Złośliwy kod może wykorzystać ten kod, aby uniknąć kontroli uprawnień.
Użycie elementu Mutex for waitObject
nie zapewnia wzajemnego wykluczenia wywołań zwrotnych, ponieważ podstawowy interfejs API systemu Windows używa flagi domyślnej WT_EXECUTEDEFAULT
, więc każde wywołanie zwrotne jest wysyłane w osobnym wątku puli wątków.
Po zakończeniu RegisteredWaitHandle korzystania z metody zwracanej przez tę metodę wywołaj metodę , RegisteredWaitHandle.Unregister aby zwolnić odwołania do uchwytu oczekiwania. Zalecamy, aby zawsze wywoływać metodę RegisteredWaitHandle.Unregister , nawet jeśli określono true
wartość executeOnlyOnce
. Odzyskiwanie pamięci działa wydajniej, jeśli wywołasz metodę RegisteredWaitHandle.Unregister zamiast w zależności od finalizatora zarejestrowanego uchwytu oczekiwania.