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

Clase ManualResetEvent

 

Publicado: octubre de 2016

Notifica que se ha producido un evento a uno o varios subprocesos en espera. Esta clase no puede heredarse.

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

System.Object
  System.MarshalByRefObject
    System.Threading.WaitHandle
      System.Threading.EventWaitHandle
        System.Threading.ManualResetEvent

[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public sealed class ManualResetEvent : EventWaitHandle

NombreDescripción
System_CAPS_pubmethodManualResetEvent(Boolean)

Inicializa una nueva instancia de la ManualResetEvent clase con un valor booleano que indica si se va a establecer el estado inicial en señalado.

NombreDescripción
System_CAPS_pubpropertyHandle

Obsoleto. Obtiene o establece el identificador del sistema operativo nativo.(Heredado de WaitHandle).

System_CAPS_pubpropertySafeWaitHandle

Obtiene o establece el identificador del sistema operativo nativo.(Heredado de WaitHandle).

NombreDescripción
System_CAPS_pubmethodClose()

Libera todos los recursos mantenidos por el objeto WaitHandle actual.(Heredado de WaitHandle).

System_CAPS_pubmethodCreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar a un proxy que se utiliza para comunicarse con un objeto remoto.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodDispose()

Libera todos los recursos usados por la instancia actual de la clase WaitHandle.(Heredado de WaitHandle).

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethodGetAccessControl()

Obtiene un objeto EventWaitHandleSecurity que representa la seguridad de control de acceso para el evento del sistema con nombre representado por el objetoEventWaitHandle actual.(Heredado de EventWaitHandle).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetLifetimeService()

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodInitializeLifetimeService()

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodReset()

Establece el estado del evento en no señalado, por lo que se bloquean los subprocesos.(Heredado de EventWaitHandle).

System_CAPS_pubmethodSet()

Establece el estado del evento en señalado, lo que permite que uno o varios subprocesos en espera continúen.(Heredado de EventWaitHandle).

System_CAPS_pubmethodSetAccessControl(EventWaitHandleSecurity)

Establece la seguridad de control de acceso para evento del sistema con nombre.(Heredado de EventWaitHandle).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

System_CAPS_pubmethodWaitOne()

Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal.(Heredado de WaitHandle).

System_CAPS_pubmethodWaitOne(Int32)

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

System_CAPS_pubmethodWaitOne(Int32, Boolean)

Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal, usa un entero de 32 bits con signo para determinar el intervalo de tiempo y especifica si hay que salir del dominio de sincronización antes de la espera.(Heredado de WaitHandle).

System_CAPS_pubmethodWaitOne(TimeSpan)

Bloquea el subproceso actual hasta que la instancia actual recibe una señal, usando TimeSpan para especificar el intervalo de tiempo.(Heredado de WaitHandle).

System_CAPS_pubmethodWaitOne(TimeSpan, Boolean)

Bloquea el subproceso actual hasta que la instancia actual recibe una señal; usa TimeSpan para determinar el intervalo de tiempo y especifica si hay que abandonar el dominio de sincronización antes de la espera.(Heredado de WaitHandle).

NombreDescripción
System_CAPS_pubmethodGetSafeWaitHandle()

Obtiene el identificador seguro para un identificador de espera del sistema operativo nativo.(Definido por WaitHandleExtensions).

System_CAPS_pubmethodSetSafeWaitHandle(SafeWaitHandle)

Establece un controlador seguro para un identificador de espera del sistema operativo nativo.(Definido por WaitHandleExtensions).

En .NET Framework versión 2.0, ManualResetEvent se deriva de la nueva EventWaitHandle clase. Un ManualResetEvent es funcionalmente equivalente a un EventWaitHandle creado con EventResetMode.ManualReset.

System_CAPS_noteNota

A diferencia de la ManualResetEvent (clase), el EventWaitHandle clase proporciona acceso a los eventos de sincronización de sistema con nombre.

ManualResetEvent permite que los subprocesos se comuniquen entre sí mediante señales. Normalmente, esta comunicación tiene relación con una tarea que un subproceso debe completar antes de que otros subprocesos puedan continuar.

Cuando un subproceso comienza una actividad que se debe completar antes de otros subprocesos se ejecutarán, llama Reset poner ManualResetEvent en el estado no señalado. Este subproceso puede considerarse como controlar la ManualResetEvent. Subprocesos de esa llamada WaitOne en el ManualResetEvent se bloqueará en espera de la señal. Cuando el subproceso controlador termina la actividad, llama a Set para indicar que los subprocesos en espera pueden continuar. Se liberan todos los subprocesos en espera.

Una vez que se ha señalado, ManualResetEvent permanece señalado hasta que se restablece manualmente. Es decir, las llamadas a WaitOne devuelven inmediatamente.

Puede controlar el estado inicial de un ManualResetEvent pasando un valor Boolean al constructor, true Si se señala el estado inicial y false en caso contrario.

ManualResetEvent También puede utilizarse con el staticWaitAll y WaitAny métodos.

Para obtener más información acerca de los mecanismos de sincronización de subprocesos, consulte ManualResetEvent and ManualResetEventSlim en la documentación conceptual.

En el ejemplo siguiente se muestra cómo ManualResetEvent funciona. El ejemplo comienza con un ManualResetEvent en estado no señalado (es decir, false se pasa al constructor). El ejemplo crea tres subprocesos, cada uno de los bloques de la ManualResetEvent llamando a su WaitOne método. Cuando el usuario presiona el ENTRAR clave, el ejemplo llama el Set método, lo que libera a los tres subprocesos. Compare esto con el comportamiento de la AutoResetEvent (clase), lo que libera los subprocesos uno a la vez, restablecer automáticamente después de cada versión.

Al presionar el ENTRAR clave nuevo muestra que el ManualResetEvent permanece en el estado señalado hasta que su Reset se llama al método: el ejemplo inicia dos subprocesos más. Estos subprocesos no se bloquean cuando llama a la WaitOne (método), sino que se ejecuten hasta su finalización.

Al presionar el ENTRAR clave nuevo hace que el ejemplo llamar a la Reset método e iniciar otro subproceso, que se bloquea cuando llama a WaitOne. Al presionar el ENTRAR clave una última vez llama Set liberar el último subproceso y el programa finaliza.

using System;
using System.Threading;

public class Example
{
    // mre is used to block and release threads manually. It is
    // created in the unsignaled state.
    private static ManualResetEvent mre = new ManualResetEvent(false);

    static void Main()
    {
        Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n");

        for(int i = 0; i <= 2; i++)
        {
            Thread t = new Thread(ThreadProc);
            t.Name = "Thread_" + i;
            t.Start();
        }

        Thread.Sleep(500);
        Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" +
                          "\nto release all the threads.\n");
        Console.ReadLine();

        mre.Set();

        Thread.Sleep(500);
        Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" +
                          "\ndo not block. Press Enter to show this.\n");
        Console.ReadLine();

        for(int i = 3; i <= 4; i++)
        {
            Thread t = new Thread(ThreadProc);
            t.Name = "Thread_" + i;
            t.Start();
        }

        Thread.Sleep(500);
        Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" +
                          "\nwhen they call WaitOne().\n");
        Console.ReadLine();

        mre.Reset();

        // Start a thread that waits on the ManualResetEvent.
        Thread t5 = new Thread(ThreadProc);
        t5.Name = "Thread_5";
        t5.Start();

        Thread.Sleep(500);
        Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");
        Console.ReadLine();

        mre.Set();

        // If you run this example in Visual Studio, uncomment the following line:
        //Console.ReadLine();
    }


    private static void ThreadProc()
    {
        string name = Thread.CurrentThread.Name;

        Console.WriteLine(name + " starts and calls mre.WaitOne()");

        mre.WaitOne();

        Console.WriteLine(name + " ends.");
    }
}

/* This example produces output similar to the following:

Start 3 named threads that block on a ManualResetEvent:

Thread_0 starts and calls mre.WaitOne()
Thread_1 starts and calls mre.WaitOne()
Thread_2 starts and calls mre.WaitOne()

When all three threads have started, press Enter to call Set()
to release all the threads.


Thread_2 ends.
Thread_0 ends.
Thread_1 ends.

When a ManualResetEvent is signaled, threads that call WaitOne()
do not block. Press Enter to show this.


Thread_3 starts and calls mre.WaitOne()
Thread_3 ends.
Thread_4 starts and calls mre.WaitOne()
Thread_4 ends.

Press Enter to call Reset(), so that threads once again block
when they call WaitOne().


Thread_5 starts and calls mre.WaitOne()

Press Enter to call Set() and conclude the demo.

Thread_5 ends.
 */

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
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

Esta clase es segura para subprocesos.

Volver al principio
Mostrar: