Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ThreadPool.UnsafeRegisterWaitForSingleObject (WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

 

Data di pubblicazione: ottobre 2016

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.

Spazio dei nomi:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

[SecurityCriticalAttribute]
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(
	WaitHandle waitObject,
	WaitOrTimerCallback callBack,
	object state,
	long millisecondsTimeOutInterval,
	bool executeOnlyOnce
)

Parametri

waitObject
Type: System.Threading.WaitHandle

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

callBack
Type: System.Threading.WaitOrTimerCallback

Delegato da chiamare quando il parametro waitObject riceve un segnale.

state
Type: System.Object

Oggetto passato al delegato.

millisecondsTimeOutInterval
Type: System.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
Type: System.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.

Valore restituito

Type: System.Threading.RegisteredWaitHandle

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

Exception Condition
ArgumentOutOfRangeException

Il millisecondsTimeOutInterval parametro è minore di -1.

SecurityException

Il chiamante non dispone dell'autorizzazione richiesta.

A differenza di RegisterWaitForSingleObject metodo UnsafeRegisterWaitForSingleObject non propaga lo stack di chiamate al thread di lavoro. In questo modo il codice perdere lo stack di chiamate e in tal modo di elevare i privilegi di sicurezza.

System_CAPS_cautionAttenzione

Utilizzando UnsafeRegisterWaitForSingleObject può provocare inavvertitamente un problema di sicurezza. Sicurezza dall'accesso di codice si basa i controlli di autorizzazione sulle autorizzazioni di tutti i chiamanti nello stack. Quando il lavoro viene accodato in un thread di pool di thread tramite UnsafeRegisterWaitForSingleObject, lo stack del thread del pool non disporrà del contesto dei chiamanti effettivi. Codice dannoso potrebbe essere in grado di sfruttare questa situazione per evitare i controlli di autorizzazione.

Utilizzando un Mutex per waitObject non garantisce l'esclusione reciproca per i callback perché l'API Win32 sottostante utilizza il valore predefinito WT_EXECUTEDEFAULT flag, pertanto ogni callback viene inviato in un pool di thread separato.

Quando si è finito utilizzando il RegisteredWaitHandle restituito da questo metodo, chiamare il relativo RegisteredWaitHandle.Unregister metodo per rilasciare i riferimenti all'handle di attesa. Si consiglia di chiamare sempre il RegisteredWaitHandle.Unregister (metodo), anche se si specifica true per executeOnlyOnce. Funzionamento di Garbage collection più efficiente se si chiama il RegisteredWaitHandle.Unregister metodo invece che a seconda del finalizzatore dell'handle di attesa registrata.

SecurityCriticalAttribute

Requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: