Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

WaitHandle (Clase)

Encapsula los objetos específicos del sistema operativo que esperan obtener un acceso exclusivo a los recursos compartidos.

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

[ComVisibleAttribute(true)]
public abstract class WaitHandle : MarshalByRefObject, 
	IDisposable

El tipo WaitHandle expone los siguientes miembros.

  NombreDescripción
Método protegidoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifWaitHandleInicializa una nueva instancia de la clase WaitHandle.
Arriba

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkHandle Obsoleto. Obtiene o establece el identificador del sistema operativo nativo.
Propiedad públicaSafeWaitHandleObtiene o establece el identificador del sistema operativo nativo.
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.
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úblico9f7e54k1.PortableClassLibrary(es-es,VS.100).gifDispose()Libera todos los recursos usados por la instancia actual de la clase WaitHandle.
Método protegidoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifDispose(Boolean)Cuando se reemplaza en una clase derivada, libera los recursos no administrados utilizados por WaitHandle y, de forma opcional, libera los recursos administrados.
Método públicoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifEquals(Object)Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object).
Método protegidoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Se hereda de Object).
Método públicoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifGetHashCodeActúa como función hash para un tipo concreto. (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 Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifGetType 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 protegidoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifMemberwiseClone() Crea una copia superficial del Object actual. (Se hereda de Object).
Método protegidoMemberwiseClone(Boolean)Crea una copia superficial del objeto MarshalByRefObject actual. (Se hereda de MarshalByRefObject).
Método públicoMiembro estáticoSignalAndWait(WaitHandle, WaitHandle)Señala un WaitHandle y espera en otro.
Método públicoMiembro estáticoSignalAndWait(WaitHandle, WaitHandle, Int32, Boolean)Señala una clase WaitHandle y espera en otra, determinando un intervalo de tiempo de espera como entero con signo de 32 bits y especificando si se sale del dominio de sincronización para el contexto antes de entrar en la espera.
Método públicoMiembro estáticoSignalAndWait(WaitHandle, WaitHandle, TimeSpan, Boolean)Señala una clase WaitHandle y espera en otra, determinando el intervalo de tiempo de espera como TimeSpan y especificando si se sale del dominio de sincronización para el contexto antes de entrar en la espera.
Método públicoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifToString Devuelve una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoMiembro estáticoWaitAll(WaitHandle[])Espera a que todos los elementos de la matriz especificada reciban una señal.
Método públicoMiembro estáticoWaitAll(WaitHandle[], Int32)Espera a que todos los elementos de la matriz especificada reciban una señal, utilizando un valor Int32 para especificar el intervalo de tiempo.
Método públicoMiembro estáticoWaitAll(WaitHandle[], TimeSpan)Espera a que todos los elementos de la matriz especificada reciban una señal, utilizando un valor TimeSpan para especificar el intervalo de tiempo.
Método públicoMiembro estáticoWaitAll(WaitHandle[], Int32, Boolean)Espera a que todos los elementos de la matriz especificada reciban una señal, utilizando un valor Int32 para especificar el intervalo de tiempo y especificar si se va a salir del dominio de sincronización antes de la espera.
Método públicoMiembro estáticoWaitAll(WaitHandle[], TimeSpan, Boolean)Espera a que todos los elementos de la matriz especificada reciban una señal, utilizando un valor TimeSpan para especificar el intervalo de tiempo y especificar si se va a salir del dominio de sincronización antes de la espera.
Método públicoMiembro estáticoWaitAny(WaitHandle[])Espera a que cualquiera de los elementos de la matriz especificada reciba una señal.
Método públicoMiembro estáticoWaitAny(WaitHandle[], Int32)Espera a que cualquiera de los elementos de la matriz especificada reciba una señal, utilizando un entero de 32 bits con signo para especificar el intervalo de tiempo.
Método públicoMiembro estáticoWaitAny(WaitHandle[], TimeSpan)Espera a que cualquiera de los elementos de la matriz especificada reciban una señal, utilizando un TimeSpan para especificar el intervalo de tiempo.
Método públicoMiembro estáticoWaitAny(WaitHandle[], Int32, Boolean)Espera a que cualquiera de los elementos de la matriz especificada reciba una señal, utilizando un entero de 32 bits con signo para especificar el intervalo de tiempo y especificar si se va a salir del dominio de sincronización antes de la espera.
Método públicoMiembro estáticoWaitAny(WaitHandle[], TimeSpan, Boolean)Espera a que cualquiera de los elementos de la matriz especificada reciba una señal, utilizando un TimeSpan para especificar el intervalo de tiempo y especificar si se va a salir del dominio de sincronización antes de la espera.
Método públicoCompatible con XNA Framework9f7e54k1.PortableClassLibrary(es-es,VS.100).gifWaitOne()Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal.
Método públicoWaitOne(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.
Método públicoWaitOne(TimeSpan)Bloquea el subproceso actual hasta que la instancia actual recibe una señal, utilizando TimeSpan para especificar el intervalo de tiempo.
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.
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.
Arriba

  NombreDescripción
Campo protegidoMiembro estáticoCompatible con XNA FrameworkInvalidHandleRepresenta un identificador del sistema operativo nativo no válido. Este campo es de sólo lectura.
Campo públicoMiembro estáticoWaitTimeoutIndica que una operación WaitAny ha superado el tiempo de espera antes de que se señalara un marcador de espera. Este campo es constante.
Arriba

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

Esta clase se utiliza normalmente como una clase base para los objetos de sincronización. Las clases que se derivan de WaitHandle definen un mecanismo de señalización para indicar que están tomando o liberando un acceso a un recurso compartido, pero utilizan los métodos WaitHandle heredados para bloquearse mientras esperan el acceso a los recursos compartidos.

Utilice los métodos estáticos de esta clase para bloquear un subproceso hasta que uno o más objetos de sincronización reciban una señal.

WaitHandle implementa el modelo Dispose. Vea Implementar Finalize y Dispose para limpiar recursos no administrados. Si deriva de WaitHandle, utilice la propiedad SafeWaitHandle para almacenar su identificador del sistema operativo nativo. No es necesario reemplazar el método protegido Dispose a menos que utilice recursos no administrados adicionales.

En el ejemplo de código siguiente se muestra cómo dos subprocesos pueden hacer tareas en segundo plano mientras el subproceso principal espera a que finalicen las tareas utilizando los métodos estáticos WaitAny y WaitAll de la clase WaitHandle.


using System;
using System.Threading;

public sealed class App 
{
    // Define an array with two AutoResetEvent WaitHandles.
    static WaitHandle[] waitHandles = new WaitHandle[] 
    {
        new AutoResetEvent(false),
        new AutoResetEvent(false)
    };

    // Define a random number generator for testing.
    static Random r = new Random();

    static void Main() 
    {
        // Queue up two tasks on two different threads; 
        // wait until all tasks are completed.
        DateTime dt = DateTime.Now;
        Console.WriteLine("Main thread is waiting for BOTH tasks to complete.");
        ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[0]);
        ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[1]);
        WaitHandle.WaitAll(waitHandles);
        // The time shown below should match the longest task.
        Console.WriteLine("Both tasks are completed (time waited={0})", 
            (DateTime.Now - dt).TotalMilliseconds);

        // Queue up two tasks on two different threads; 
        // wait until any tasks are completed.
        dt = DateTime.Now;
        Console.WriteLine();
        Console.WriteLine("The main thread is waiting for either task to complete.");
        ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[0]);
        ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[1]);
        int index = WaitHandle.WaitAny(waitHandles);
        // The time shown below should match the shortest task.
        Console.WriteLine("Task {0} finished first (time waited={1}).",
            index + 1, (DateTime.Now - dt).TotalMilliseconds);
    }

    static void DoTask(Object state) 
    {
        AutoResetEvent are = (AutoResetEvent) state;
        int time = 1000 * r.Next(2, 10);
        Console.WriteLine("Performing a task for {0} milliseconds.", time);
        Thread.Sleep(time);
        are.Set();
    }
}

// This code produces output similar to the following:
//
//  Main thread is waiting for BOTH tasks to complete.
//  Performing a task for 7000 milliseconds.
//  Performing a task for 4000 milliseconds.
//  Both tasks are completed (time waited=7064.8052)
// 
//  The main thread is waiting for either task to complete.
//  Performing a task for 2000 milliseconds.
//  Performing a task for 2000 milliseconds.
//  Task 1 finished first (time waited=2000.6528).


.NET Framework

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

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Compatible con:

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

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

Este tipo es seguro para la ejecución de subprocesos.

Mostrar: