Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método WaitHandle.WaitOne (Int32)

 

Publicado: noviembre de 2016

Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal, usando un entero de 32 bits con signo para especificar el intervalo de tiempo en milisegundos.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

public virtual bool WaitOne(
	int millisecondsTimeout
)

Parámetros

millisecondsTimeout
Type: System.Int32

Número de milisegundos de espera o Timeout.Infinite (-1) para esperar indefinidamente.

Valor devuelto

Type: System.Boolean

true si la instancia actual recibe una señal; de lo contrario, false.

Exception Condition
ObjectDisposedException

Ya se ha eliminado la instancia actual.

ArgumentOutOfRangeException

millisecondsTimeout es un número negativo distinto de-1, que representa un tiempo de espera infinito.

AbandonedMutexException

La espera se completó porque un subproceso sale sin liberar una exclusión mutua. Esta excepción no se produce en Windows 98 o Windows Millennium Edition.

InvalidOperationException

La instancia actual es un proxy transparente para un WaitHandle en otro dominio de aplicación.

Si millisecondsTimeout es cero, el método no se bloquea. Comprueba el estado del identificador de espera y vuelve inmediatamente.

Se produce el llamador de este método se bloquea hasta que la instancia actual recibe una señal o un tiempo de espera. Utilice este método para bloquear hasta que un WaitHandle recibe una señal de otro subproceso, como se genera cuando se completa una operación asincrónica. Para obtener más información, consulte el IAsyncResult interfaz.

Invalide este método para personalizar el comportamiento de las clases derivadas.

Llamar a esta sobrecarga del método es igual que llamar a la WaitOne(Int32, Boolean) sobrecarga y la especificación de false para exitContext.

En el ejemplo de código siguiente se muestra cómo usar un identificador de espera para mantener un proceso sin terminar mientras espera a que termine de ejecutarse un subproceso en segundo plano.

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.
        if(autoEvent.WaitOne(1000))
        {
            Console.WriteLine("Work method signaled.");
        }
        else
        {
            Console.WriteLine("Timed out waiting for work " +
                "method to signal.");
        }
        Console.WriteLine("Main 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();
    }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: