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

AutoResetEvent (Clase)

Notifica que se ha producido un evento a un subproceso 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 AutoResetEvent : EventWaitHandle

El tipo AutoResetEvent 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 WindowsAutoResetEventInicializa una instancia de la clase AutoResetEvent con un valor Boolean 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

AutoResetEvent permite que los subprocesos se comuniquen unos con otros mediante señales. Normalmente, utilice esta clase cuando los subprocesos necesiten acceso exclusivo a un recurso.

Un subproceso espera una señal mediante una llamada a WaitOne en el AutoResetEvent. Si AutoResetEvent se encuentra en el estado no señalado, el subproceso se bloquea en espera de que el subproceso que controla el recurso en ese momento indique que dicho recurso está disponible mediante una llamada a Set.

Una llamada a Set indica a AutoResetEvent que libere un subproceso en espera. AutoResetEvent permanece señalado hasta que se libera un único subproceso en espera y, a continuación, vuelve automáticamente al estado de no señalado. Si no hay ningún subproceso en espera, el estado permanece señalado indefinidamente.

Si un subproceso llama a WaitOne mientras que AutoResetEvent está en el estado señalado, el subproceso no se queda bloqueado. AutoResetEvent libera inmediatamente el subproceso y vuelve al estado no señalado.

Nota importanteImportante

No hay ninguna garantía de que cada llamada al método Set liberará un subproceso. Si dos llamadas están muy seguidas, de modo que la segunda llamada se produce antes de que se haya liberado un subproceso, sólo se liberará un subproceso. Es como si la segunda llamada no hubiera ocurrido. Además, si se llama a Set cuando no hay subprocesos en espera y ya se ha marcado AutoResetEvent, la llamada no tendrá ningún efecto.

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

AutoResetEvent 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 AutoResetEvent en la documentación conceptual.

A partir de la versión 2.0 de .NET Framework, la clase AutoResetEvent se deriva de la nueva clase EventWaitHandle. Una clase AutoResetEvent es equivalente en lo a funciones se refiere a una clase EventWaitHandle creada con una enumeración EventResetMode.AutoReset.

NotaNota

A diferencia de la clase AutoResetEvent, la clase EventWaitHandle proporciona acceso a eventos de sincronización del sistema con nombre.

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 siguiente ejemplo se muestra cómo utilizar AutoResetEvent para lanzar al mercado un subproceso a la vez, llamando al método (en la clase base) Set cada vez que el usuario presiona la tecla Entrar. En el ejemplo se inician tres subprocesos, que esperan un AutoResetEvent que se creó en el estado señalado. El primer subproceso se libera inmediatamente, porque el AutoResetEvent ya está en el estado señalado. Esto restablece AutoResetEvent al estado no señalado, para que los subprocesos subsiguientes se bloqueen. Los subprocesos bloqueados no se liberan hasta que el usuario los libera de uno en uno presionando la tecla Entrar.

Una vez lanzados los subprocesos del primer AutoResetEvent, esperan en otro AutoResetEvent que se creó en el estado no señalado. Todo el bloque de tres subprocesos, de modo que se debe llamar al método Set tres veces para liberarlos.


using System;
using System.Threading;

// Visual Studio: Replace the default class in a Console project with 
//                the following class.
class Example
{
    private static AutoResetEvent event_1 = new AutoResetEvent(true);
    private static AutoResetEvent event_2 = new AutoResetEvent(false);

    static void Main()
    {
        Console.WriteLine("Press Enter to create three threads and start them.\r\n" +
                          "The threads wait on AutoResetEvent #1, which was created\r\n" +
                          "in the signaled state, so the first thread is released.\r\n" +
                          "This puts AutoResetEvent #1 into the unsignaled state.");
        Console.ReadLine();

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

        for (int i = 0; i < 2; i++)
        {
            Console.WriteLine("Press Enter to release another thread.");
            Console.ReadLine();
            event_1.Set();
            Thread.Sleep(250);
        }

        Console.WriteLine("\r\nAll threads are now waiting on AutoResetEvent #2.");
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine("Press Enter to release a thread.");
            Console.ReadLine();
            event_2.Set();
            Thread.Sleep(250);
        }

        // Visual Studio: Uncomment the following line.
        //Console.Readline();
    }

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

        Console.WriteLine("{0} waits on AutoResetEvent #1.", name);
        event_1.WaitOne();
        Console.WriteLine("{0} is released from AutoResetEvent #1.", name);

        Console.WriteLine("{0} waits on AutoResetEvent #2.", name);
        event_2.WaitOne();
        Console.WriteLine("{0} is released from AutoResetEvent #2.", name);

        Console.WriteLine("{0} ends.", name);
    }
}

/* This example produces output similar to the following:

Press Enter to create three threads and start them.
The threads wait on AutoResetEvent #1, which was created
in the signaled state, so the first thread is released.
This puts AutoResetEvent #1 into the unsignaled state.

Thread_1 waits on AutoResetEvent #1.
Thread_1 is released from AutoResetEvent #1.
Thread_1 waits on AutoResetEvent #2.
Thread_3 waits on AutoResetEvent #1.
Thread_2 waits on AutoResetEvent #1.
Press Enter to release another thread.

Thread_3 is released from AutoResetEvent #1.
Thread_3 waits on AutoResetEvent #2.
Press Enter to release another thread.

Thread_2 is released from AutoResetEvent #1.
Thread_2 waits on AutoResetEvent #2.

All threads are now waiting on AutoResetEvent #2.
Press Enter to release a thread.

Thread_2 is released from AutoResetEvent #2.
Thread_2 ends.
Press Enter to release a thread.

Thread_1 is released from AutoResetEvent #2.
Thread_1 ends.
Press Enter to release a thread.

Thread_3 is released from AutoResetEvent #2.
Thread_3 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