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.TryEnter (Object, TimeSpan, Boolean)

 

Prova ad acquisire, per la quantità di tempo specificata, un blocco esclusivo sull'oggetto specificato e imposta atomicamente un valore che indica se il blocco è stato ottenuto.

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

public static void TryEnter(
	object obj,
	TimeSpan timeout,
	ref bool lockTaken
)

Parametri

obj
Type: System.Object

Oggetto sul quale acquisire il blocco.

timeout
Type: System.TimeSpan

Quantità di tempo che rappresenta la durata di attesa del blocco. Un valore di –1 millisecondo specifica un'attesa infinita.

lockTaken
Type: System.Boolean

Risultato del tentativo di acquisizione del blocco passato dal riferimento. L'input deve essere false. L'output è true se il blocco viene acquisito; in caso contrario, l'output è false. L'output viene impostato anche se si verifica un'eccezione durante il tentativo di acquisire il blocco.

Exception Condition
ArgumentException

L'input per lockTaken è true.

ArgumentNullException

Il valore del parametro obj è null.

ArgumentOutOfRangeException

Il valore di timeout in millisecondi è negativo e non è uguale a Infinite (-1 millisecondo) oppure è maggiore di MaxValue.

Se il valore di timeout parametro convertito in millisecondi è uguale a -1, questo metodo equivale a Enter(Object). Se il valore di timeout è uguale a 0, questo metodo equivale a TryEnter(Object).

Se il blocco non è stato creato perché è stata generata un'eccezione, la variabile specificata per il lockTaken parametro false dopo che questo metodo termina. In questo modo il programma determinare, in tutti i casi, se è necessario rilasciare il blocco.

System_CAPS_noteNota

Utilizzare Monitor per bloccare gli oggetti (ovvero, i tipi di riferimento), non i tipi di valore. Per ulteriori informazioni, vedere il Monitor argomento relativo alla classe.

Per garantire che il thread non di accedere alla sezione critica, è necessario esaminare il valore di lockTaken ed eseguire il codice nella sezione critica solo se il valore è true. Frammento di codice seguente viene illustrato il motivo usato per chiamare questo metodo. Si noti che è necessario chiamare Exit in un finally blocco per garantire che il thread chiamante rilascia il blocco su una sezione critica se si verifica un'eccezione.

var lockObj = new Object();
var timeout = TimeSpan.FromMilliseconds(500);
bool lockTaken = false;

try {
   Monitor.TryEnter(lockObj, timeout, ref lockTaken);
   if (lockTaken) {
      // The critical section.
   }
   else {
      // The lock was not acquired.
   }
}
finally {
   // Ensure that the lock is released.
   if (lockTaken) {
      Monitor.Exit(lockObj);
   }
}

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