Condividi tramite


ThreadPool.UnsafeRegisterWaitForSingleObject Metodo

Definizione

Registra un delegato per l'attesa di un WaitHandle, ma non propaga lo stack di chiamata nel thread di lavoro.

Overload

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

Registra un delegato per l'attesa di un oggetto WaitHandle, specificando un valore TimeSpan per il timeout. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

Registra un delegato per l'attesa di un WaitHandle, specificando un intero con segno a 32 bit per il timeout in millisecondi. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Registra un delegato per l'attesa di un oggetto WaitHandle, specificando un valore intero con segno a 64 bit per il timeout in millisecondi. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

Registra un delegato per l'attesa di un oggetto WaitHandle, specificando un intero senza segno a 32 bit per il timeout in millisecondi. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs

Registra un delegato per l'attesa di un oggetto WaitHandle, specificando un valore TimeSpan per il timeout. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

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

Parametri

waitObject
WaitHandle

WaitHandle da registrare. Usare una classe WaitHandle diversa da Mutex.

callBack
WaitOrTimerCallback

Delegato da chiamare quando il parametro waitObject riceve un segnale.

state
Object

Oggetto passato al delegato.

timeout
TimeSpan

Il timeout rappresentato da un valore TimeSpan. Se timeout è pari a 0 (zero), la funzione verifica lo stato dell'oggetto e restituisce immediatamente un valore. Se timeout è -1, l'intervallo di timeout della funzione non termina mai.

executeOnlyOnce
Boolean

Viene restituito true per indicare che il thread non attenderà più in base al parametro waitObject dopo la chiamata al delegato; false per indicare che il timer viene reimpostato ogni volta che l'operazione di attesa viene completata fino all'annullamento della registrazione dell'attesa.

Restituisce

Oggetto RegisteredWaitHandle che può essere usato per annullare l'operazione di attesa registrata.

Attributi

Eccezioni

Il parametro timeout è minore di -1.

Il timeout parametro è maggiore di Int32.MaxValue.

Il chiamante non dispone dell'autorizzazione richiesta.

Commenti

A differenza del RegisterWaitForSingleObject metodo , UnsafeRegisterWaitForSingleObject non propaga lo stack di chiamate al thread di lavoro. Ciò consente al codice di perdere lo stack di chiamate e quindi di elevare i privilegi di sicurezza.

Attenzione

L'uso UnsafeRegisterWaitForSingleObject di potrebbe inavvertitamente aprire un buco di sicurezza. La sicurezza dell'accesso al codice basa i controlli delle autorizzazioni per le autorizzazioni di tutti i chiamanti nello stack. Quando il lavoro viene accodato in un thread del pool di thread usando UnsafeRegisterWaitForSingleObject, lo stack del thread del pool di thread non avrà il contesto dei chiamanti effettivi. Il codice dannoso potrebbe essere in grado di sfruttarlo per evitare i controlli delle autorizzazioni.

L'uso di per MutexwaitObject non fornisce l'esclusione reciproca per i callback perché l'API Di Windows sottostante usa il flag predefinito WT_EXECUTEDEFAULT , quindi ogni callback viene inviato in un thread del pool di thread separato.

Al termine dell'utilizzo dell'oggetto RegisteredWaitHandle restituito da questo metodo, chiamare il relativo RegisteredWaitHandle.Unregister metodo per rilasciare i riferimenti all'handle di attesa. È consigliabile chiamare sempre il RegisteredWaitHandle.Unregister metodo , anche se si specifica true per executeOnlyOnce. Garbage Collection funziona in modo più efficiente se si chiama il RegisteredWaitHandle.Unregister metodo anziché a seconda del finalizzatore dell'handle di attesa registrato.

Vedi anche

Si applica a

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs

Registra un delegato per l'attesa di un WaitHandle, specificando un intero con segno a 32 bit per il timeout in millisecondi. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

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

Parametri

waitObject
WaitHandle

WaitHandle da registrare. Usare una classe WaitHandle diversa da Mutex.

callBack
WaitOrTimerCallback

Delegato da chiamare quando il parametro waitObject riceve un segnale.

state
Object

Oggetto passato al delegato.

millisecondsTimeOutInterval
Int32

Timeout in millisecondi. Se il parametro millisecondsTimeOutInterval è pari a 0 (zero), la funzione verifica lo stato dell'oggetto e restituisce immediatamente un valore. Se millisecondsTimeOutInterval è -1, l'intervallo di timeout della funzione non termina mai.

executeOnlyOnce
Boolean

Viene restituito true per indicare che il thread non attenderà più in base al parametro waitObject dopo la chiamata al delegato; false per indicare che il timer viene reimpostato ogni volta che l'operazione di attesa viene completata fino all'annullamento della registrazione dell'attesa.

Restituisce

Oggetto RegisteredWaitHandle che può essere usato per annullare l'operazione di attesa registrata.

Attributi

Eccezioni

Il parametro millisecondsTimeOutInterval è minore di -1.

Il chiamante non dispone dell'autorizzazione richiesta.

Commenti

A differenza del RegisterWaitForSingleObject metodo , UnsafeRegisterWaitForSingleObject non propaga lo stack di chiamate al thread di lavoro. Ciò consente al codice di perdere lo stack di chiamate e quindi di elevare i privilegi di sicurezza.

Attenzione

L'uso UnsafeRegisterWaitForSingleObject di potrebbe inavvertitamente aprire un buco di sicurezza. La sicurezza dell'accesso al codice basa i controlli delle autorizzazioni per le autorizzazioni di tutti i chiamanti nello stack. Quando il lavoro viene accodato in un thread del pool di thread usando UnsafeRegisterWaitForSingleObject, lo stack del thread del pool di thread non avrà il contesto dei chiamanti effettivi. Il codice dannoso potrebbe essere in grado di sfruttarlo per evitare i controlli delle autorizzazioni.

L'uso di per MutexwaitObject non fornisce l'esclusione reciproca per i callback perché l'API Di Windows sottostante usa il flag predefinito WT_EXECUTEDEFAULT , quindi ogni callback viene inviato in un thread del pool di thread separato.

Al termine dell'utilizzo dell'oggetto RegisteredWaitHandle restituito da questo metodo, chiamare il relativo RegisteredWaitHandle.Unregister metodo per rilasciare i riferimenti all'handle di attesa. È consigliabile chiamare sempre il RegisteredWaitHandle.Unregister metodo , anche se si specifica true per executeOnlyOnce. Garbage Collection funziona in modo più efficiente se si chiama il RegisteredWaitHandle.Unregister metodo anziché a seconda del finalizzatore dell'handle di attesa registrato.

Vedi anche

Si applica a

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs

Registra un delegato per l'attesa di un oggetto WaitHandle, specificando un valore intero con segno a 64 bit per il timeout in millisecondi. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

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

Parametri

waitObject
WaitHandle

WaitHandle da registrare. Usare una classe WaitHandle diversa da Mutex.

callBack
WaitOrTimerCallback

Delegato da chiamare quando il parametro waitObject riceve un segnale.

state
Object

Oggetto passato al delegato.

millisecondsTimeOutInterval
Int64

Timeout in millisecondi. Se il parametro millisecondsTimeOutInterval è pari a 0 (zero), la funzione verifica lo stato dell'oggetto e restituisce immediatamente un valore. Se millisecondsTimeOutInterval è -1, l'intervallo di timeout della funzione non termina mai.

executeOnlyOnce
Boolean

Viene restituito true per indicare che il thread non attenderà più in base al parametro waitObject dopo la chiamata al delegato; false per indicare che il timer viene reimpostato ogni volta che l'operazione di attesa viene completata fino all'annullamento della registrazione dell'attesa.

Restituisce

Oggetto RegisteredWaitHandle che può essere usato per annullare l'operazione di attesa registrata.

Attributi

Eccezioni

Il parametro millisecondsTimeOutInterval è minore di -1.

Il chiamante non dispone dell'autorizzazione richiesta.

Commenti

A differenza del RegisterWaitForSingleObject metodo , UnsafeRegisterWaitForSingleObject non propaga lo stack di chiamate al thread di lavoro. Ciò consente al codice di perdere lo stack di chiamate e quindi di elevare i privilegi di sicurezza.

Attenzione

L'uso UnsafeRegisterWaitForSingleObject di potrebbe inavvertitamente aprire un buco di sicurezza. La sicurezza dell'accesso al codice basa i controlli delle autorizzazioni per le autorizzazioni di tutti i chiamanti nello stack. Quando il lavoro viene accodato in un thread del pool di thread usando UnsafeRegisterWaitForSingleObject, lo stack del thread del pool di thread non avrà il contesto dei chiamanti effettivi. Il codice dannoso potrebbe essere in grado di sfruttarlo per evitare i controlli delle autorizzazioni.

L'uso di per MutexwaitObject non fornisce l'esclusione reciproca per i callback perché l'API Di Windows sottostante usa il flag predefinito WT_EXECUTEDEFAULT , quindi ogni callback viene inviato in un thread del pool di thread separato.

Al termine dell'utilizzo dell'oggetto RegisteredWaitHandle restituito da questo metodo, chiamare il relativo RegisteredWaitHandle.Unregister metodo per rilasciare i riferimenti all'handle di attesa. È consigliabile chiamare sempre il RegisteredWaitHandle.Unregister metodo , anche se si specifica true per executeOnlyOnce. Garbage Collection funziona in modo più efficiente se si chiama il RegisteredWaitHandle.Unregister metodo anziché a seconda del finalizzatore dell'handle di attesa registrato.

Vedi anche

Si applica a

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs
Origine:
ThreadPoolWorkQueue.cs

Importante

Questa API non è conforme a CLS.

Registra un delegato per l'attesa di un oggetto WaitHandle, specificando un intero senza segno a 32 bit per il timeout in millisecondi. Questo metodo non propaga lo stack di chiamate al thread di lavoro.

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

Parametri

waitObject
WaitHandle

WaitHandle da registrare. Usare una classe WaitHandle diversa da Mutex.

callBack
WaitOrTimerCallback

Delegato da chiamare quando il parametro waitObject riceve un segnale.

state
Object

Oggetto passato al delegato.

millisecondsTimeOutInterval
UInt32

Timeout in millisecondi. Se il parametro millisecondsTimeOutInterval è pari a 0 (zero), la funzione verifica lo stato dell'oggetto e restituisce immediatamente un valore. Se millisecondsTimeOutInterval è -1, l'intervallo di timeout della funzione non termina mai.

executeOnlyOnce
Boolean

Viene restituito true per indicare che il thread non attenderà più in base al parametro waitObject dopo la chiamata al delegato; false per indicare che il timer viene reimpostato ogni volta che l'operazione di attesa viene completata fino all'annullamento della registrazione dell'attesa.

Restituisce

Oggetto RegisteredWaitHandle che può essere usato per annullare l'operazione di attesa registrata.

Attributi

Eccezioni

Il chiamante non dispone dell'autorizzazione richiesta.

Commenti

A differenza del RegisterWaitForSingleObject metodo, UnsafeRegisterWaitForSingleObject non propaga lo stack di chiamate al thread di lavoro. Ciò consente al codice di perdere lo stack di chiamate e quindi di elevare i privilegi di sicurezza.

Attenzione

L'uso UnsafeRegisterWaitForSingleObject potrebbe aprire inavvertitamente un buco di sicurezza. La sicurezza di accesso al codice basa i controlli delle autorizzazioni relative alle autorizzazioni di tutti i chiamanti nello stack. Quando il lavoro viene accodato in un thread del pool di thread usando UnsafeRegisterWaitForSingleObject, lo stack del thread del pool di thread non avrà il contesto dei chiamanti effettivi. Il codice dannoso potrebbe essere in grado di sfruttarlo per evitare controlli delle autorizzazioni.

L'uso di un Mutex for waitObject non fornisce l'esclusione reciproca per i callback perché l'API Windows sottostante usa il flag predefinito WT_EXECUTEDEFAULT , quindi ogni callback viene inviato in un thread di pool di thread separato.

Al termine dell'uso dell'oggetto RegisteredWaitHandle restituito da questo metodo, chiamare il RegisteredWaitHandle.Unregister metodo per rilasciare i riferimenti all'handle di attesa. È consigliabile chiamare sempre il RegisteredWaitHandle.Unregister metodo, anche se si specifica true per executeOnlyOnce. Garbage Collection funziona in modo più efficiente se si chiama il RegisteredWaitHandle.Unregister metodo anziché a seconda del finalizzatore di attesa registrato.

Vedi anche

Si applica a