Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ManualResetEvent (Clase)

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)

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

El tipo ManualResetEvent expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsManualResetEventInicializa una nueva instancia de la clase ManualResetEvent con un valor booleano que indica si hay que establecer el estado inicial en señalado.
Arriba

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkHandle Obsoleto. Obtiene o establece el identificador del sistema operativo nativo. (Se hereda de WaitHandle).
Propiedad públicaSafeWaitHandleObtiene o establece el identificador del sistema operativo nativo. (Se hereda de WaitHandle).
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkClose Cuando se sobrescribe en una clase derivada, libera todos los recursos mantenidos por el WaitHandle actual. (Se hereda de WaitHandle).

In XNA Framework, este miembro está invalidado por Close().
Método públicoCreateObjRefCrea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto. (Se hereda de MarshalByRefObject).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDispose()Libera todos los recursos usados por la instancia actual de la clase WaitHandle. (Se hereda de WaitHandle).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método públicoGetAccessControlObtiene un objeto EventWaitHandleSecurity que representa la seguridad de control de acceso para el evento del sistema con nombre representado por el objeto EventWaitHandle actual. (Se hereda de EventWaitHandle).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetLifetimeServiceRecupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia. (Se hereda de MarshalByRefObject).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoInitializeLifetimeServiceObtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia. (Se hereda de MarshalByRefObject).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsResetEstablece el estado del evento en no señalado, haciendo que los subprocesos se bloqueen. (Se hereda de EventWaitHandle).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSetEstablece el estado del evento en señalado, permitiendo que uno o varios subprocesos en espera continúen. (Se hereda de EventWaitHandle).
Método públicoSetAccessControlEstablece la seguridad de control de acceso para un evento del sistema con nombre. (Se hereda de EventWaitHandle).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkWaitOne()Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal. (Se hereda de WaitHandle).

In XNA Framework, este miembro está invalidado por WaitOne().
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWaitOne(Int32)Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal, utilizando un entero de 32 bits con signo para especificar el intervalo de tiempo. (Se hereda de WaitHandle).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWaitOne(TimeSpan)Bloquea el subproceso actual hasta que la instancia actual recibe una señal, utilizando TimeSpan para especificar el intervalo de tiempo. (Se hereda de WaitHandle).
Método públicoCompatible con XNA FrameworkWaitOne(Int32, Boolean)Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal, utilizando un entero de 32 bits con signo para especificar el intervalo de tiempo y especificando si hay que salir del dominio de sincronización antes de la espera. (Se hereda de WaitHandle).

In XNA Framework, este miembro está invalidado por WaitOne(Int32, Boolean).
Método públicoWaitOne(TimeSpan, Boolean)Bloquea el subproceso actual hasta que la instancia actual recibe una señal, utilizando TimeSpan para especificar el intervalo de tiempo y especificando si hay que abandonar el dominio de sincronización antes de la espera. (Se hereda de WaitHandle).
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privadoCompatible con XNA FrameworkIDisposable.DisposeInfraestructura. Libera todos los recursos utilizados por WaitHandle. (Se hereda de WaitHandle).
Arriba

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

NotaNota

A diferencia de la clase ManualResetEvent, la clase EventWaitHandle proporciona acceso a los eventos de sincronización del 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 terminar para que puedan continuar otros subprocesos.

Cuando un subproceso comienza una actividad que se debe terminar para que puedan continuar otros subprocesos, llama a Reset para poner ManualResetEvent en el estado de no señalado. Es como si este subproceso controlara a ManualResetEvent. Los subprocesos que llaman a WaitOne en ManualResetEvent se bloquean 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 se devuelven inmediatamente.

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

ManualResetEvent puede utilizarse también con los métodos staticWaitAll y WaitAny.

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

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el valor de propiedad Resources siguiente: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

En el ejemplo siguiente se muestra cómo funciona ManualResetEvent. El ejemplo comienza con un ManualResetEvent en el estado no señalado (es decir, se pasa false al constructor). En el ejemplo se crean tres subprocesos, cada uno de los cuales se bloquea en ManualResetEvent llamando a su método WaitOne. Al presionar la tecla Entrar, el ejemplo llama al método Set, que libera los tres subprocesos. Coteje esto con el comportamiento de la clase AutoResetEvent, que libera subprocesos de uno en uno y se restablece automáticamente tras cada uno de ellos.

Presionando la tecla Entrar de nuevo muestra que ManualResetEvent permanece en el estado señalado hasta que se llama a su método Reset: el ejemplo inicia dos subprocesos más. Estos subprocesos no se bloquean cuando llaman al método WaitOne sino que, en su lugar, se ejecutan hasta completarse.

Al presionar la tecla Entrar de nuevo, hace que el ejemplo llame al método Reset e inicie un subproceso más, que bloquea cuando llama a WaitOne. Presionando la tecla Entrar una última vez llama a Set para lanzar al mercado el último subproceso y el programa termina.


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.
 */


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Esta clase es segura para subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft