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 WaitHandle.WaitOne ()

 

Data di pubblicazione: ottobre 2016

Blocca il thread corrente finché l'oggetto WaitHandle corrente non riceve un segnale.

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

public virtual bool WaitOne()

Valore restituito

Type: System.Boolean

true se l'istanza corrente riceve un segnale. Se l'istanza corrente non viene mai segnalata, WaitOne non restituisce mai alcun valore.

Exception Condition
ObjectDisposedException

L'istanza corrente è già stato eliminato.

AbandonedMutexException

Attesa completata perché un thread terminato senza rilasciare il mutex. In Windows 98 o Windows Millennium Edition non viene generata questa eccezione.

InvalidOperationException

L'istanza corrente è un proxy trasparente per un WaitHandle in un altro dominio applicazione.

AbandonedMutexException è stato introdotto in .NET Framework versione 2.0. Nelle versioni precedenti, il WaitOne restituisce true quando un mutex viene abbandonato. Un mutex abbandonato indica spesso un errore di codifica grave. Nel caso di un mutex di sistema, potrebbe indicare che un'applicazione è stata terminata in modo anomalo (ad esempio, utilizzando Gestione attività Windows). L'eccezione contiene informazioni utili per il debug.

Il chiamante di questo metodo si blocca in modo indefinito finché l'istanza corrente riceve un segnale. Utilizzare questo metodo per il blocco fino a un WaitHandle riceve un segnale da un altro thread, ad esempio viene generato quando un'operazione asincrona. Per ulteriori informazioni, vedere il IAsyncResult interfaccia.

Chiamare l'overload di questo metodo è equivalente alla chiamata di WaitOne(Int32, Boolean) overload del metodo e specificare -1 o Timeout.Infinite per il primo parametro e false per il secondo parametro.

Eseguire l'override di questo metodo per personalizzare il comportamento delle classi derivate.

Esempio di codice seguente viene illustrato come utilizzare un handle di attesa per mantenere un processo venga interrotto durante l'attesa di un thread in background terminare l'esecuzione.

using System;
using System.Threading;

class WaitOne
{
    static AutoResetEvent autoEvent = new AutoResetEvent(false);

    static void Main()
    {
        Console.WriteLine("Main starting.");

        ThreadPool.QueueUserWorkItem(
            new WaitCallback(WorkMethod), autoEvent);

        // Wait for work method to signal.
        autoEvent.WaitOne();
        Console.WriteLine("Work method signaled.\nMain ending.");
    }

    static void WorkMethod(object stateInfo) 
    {
        Console.WriteLine("Work starting.");

        // Simulate time spent working.
        Thread.Sleep(new Random().Next(100, 2000));

        // Signal that work is finished.
        Console.WriteLine("Work ending.");
        ((AutoResetEvent)stateInfo).Set();
    }
}

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: