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 Monitor.Wait (Object)

 

Data di pubblicazione: ottobre 2016

Rilascia il blocco su un oggetto e interrompe il thread corrente finché riacquisisce il blocco.

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

public static bool Wait(
	object obj
)

Parametri

obj
Type: System.Object

Oggetto per il quale attendere.

Valore restituito

Type: System.Boolean

true se la chiamata è stata restituita perché il chiamante ha riacquisito il blocco per l'oggetto specificato. Non viene restituito alcun valore se il blocco non viene riacquisito.

Exception Condition
ArgumentNullException

Il valore del parametro obj è null.

SynchronizationLockException

Il thread chiamante non dispone del blocco per l'oggetto specificato.

ThreadInterruptedException

Il thread che richiama Wait viene interrotto in seguito dallo stato di attesa. Ciò si verifica quando un altro thread chiama questo thread Interrupt metodo.

Questo metodo viene richiamato dal thread che possiede attualmente il blocco sull'oggetto specificato per il rilascio dell'oggetto in modo che un altro thread può accedervi. Il chiamante è bloccato in attesa di riacquisizione del blocco. Questo metodo viene chiamato quando il chiamante deve attendere una modifica dello stato che si verificherà in seguito a operazioni di un altro thread.

Quando un thread chiama Wait, rilascia il blocco sull'oggetto e inserito nella coda in attesa dell'oggetto. Il thread successivo nella coda pronti dell'oggetto (se presente) acquisisce il blocco e ha l'uso esclusivo dell'oggetto. Tutti i thread che chiamano Wait rimangono nella coda di attesa finché non ricevono un segnale da Pulse o PulseAll, inviato dal proprietario del blocco. Se Pulse viene inviato solo il thread all'inizio della coda di attesa è interessato. Se PulseAll viene inviato, sono interessati tutti i thread in attesa per l'oggetto. Quando viene ricevuto il segnale, uno o più thread lasciato nella coda di attesa e inseriti nella coda pronta. Un thread nella coda pronto può riacquisire il blocco.

Questo metodo viene restituito quando il thread chiamante riacquisisce il blocco sull'oggetto. Si noti che questo metodo in modo indefinito se il proprietario del blocco non chiama Pulse o PulseAll.

Il chiamante esegue Wait una volta, indipendentemente dal numero di volte in cui Enter è stato richiamato per l'oggetto specificato. Concettualmente, il Wait metodo memorizza il numero di chiamate Enter sull'oggetto e richiama Exit tutte le volte necessarie per ottenere il rilascio dell'oggetto bloccato. Il chiamante si bloccherà in attesa di riacquisizione dell'oggetto. Quando il chiamante riacquisisce il blocco, il sistema chiama Enter tutte le volte necessarie per ripristinare il salvato Enter conteggio per il chiamante. La chiamata Wait rilascia il blocco per l'oggetto specificato solo se il chiamante è il proprietario di blocchi su altri oggetti, tali blocchi non vengono rilasciati.

Si noti che un oggetto sincronizzato contiene diversi riferimenti, incluso un riferimento al thread proprietario del blocco, un riferimento alla coda pronto, che contiene i thread pronti ottenere il blocco, e un riferimento alla coda di attesa, che contiene i thread in attesa per la notifica di cambiamento dello stato dell'oggetto.

Il Pulse, PulseAll, e Wait metodi devono essere richiamati dall'interno di un blocco sincronizzato di codice.

Le note per la Pulse metodo viene descritto cosa accade se Pulse viene chiamato quando non sono in attesa alcun thread.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: