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 ManualResetEventSlim

.NET Framework (current version)
 

Publicado: octubre de 2016

Proporciona una reducida versión de ManualResetEvent.

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

System.Object
  System.Threading.ManualResetEventSlim

[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class ManualResetEventSlim : IDisposable

NombreDescripción
System_CAPS_pubmethodManualResetEventSlim()

Inicializa una nueva instancia de la ManualResetEventSlim clase con un estado inicial establecido en no señalado.

System_CAPS_pubmethodManualResetEventSlim(Boolean)

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

System_CAPS_pubmethodManualResetEventSlim(Boolean, Int32)

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

NombreDescripción
System_CAPS_pubpropertyIsSet

Obtiene un valor que indica si se ha establecido el evento.

System_CAPS_pubpropertySpinCount

Obtiene el número de esperas circulares que se van a producir antes de una operación de espera basada en kernel.

System_CAPS_pubpropertyWaitHandle

Obtiene el WaitHandle objeto para este ManualResetEventSlim.

NombreDescripción
System_CAPS_pubmethodDispose()

Libera todos los recursos usados por la instancia actual de la clase ManualResetEventSlim.

System_CAPS_protmethodDispose(Boolean)

Libera los recursos no administrados utilizados por el objeto ManualResetEventSlim y, de forma opcional, libera los recursos administrados.

System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

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

System_CAPS_pubmethodGetType()

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

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodReset()

Establece el estado del evento en no señalado, por lo que se bloquean los subprocesos.

System_CAPS_pubmethodSet()

Establece el estado del evento en señalado, lo que permite la continuación de uno o varios subprocesos que están esperando en el evento.

System_CAPS_pubmethodToString()

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

System_CAPS_pubmethodWait()

Bloquea el subproceso actual hasta que el actual ManualResetEventSlim se establece.

System_CAPS_pubmethodWait(CancellationToken)

Bloquea el subproceso actual hasta que el actual ManualResetEventSlim recibe una señal, mientras se observa un CancellationToken.

System_CAPS_pubmethodWait(Int32)

Bloquea el subproceso actual hasta que el actual ManualResetEventSlim se establece utilizando un entero de 32 bits con signo para medir el intervalo de tiempo.

System_CAPS_pubmethodWait(Int32, CancellationToken)

Bloquea el subproceso actual hasta que el actual ManualResetEventSlim se establece utilizando un entero de 32 bits con signo para medir el intervalo de tiempo, mientras se observa un CancellationToken.

System_CAPS_pubmethodWait(TimeSpan)

Bloquea el subproceso actual hasta que el actual ManualResetEventSlim se establece mediante un TimeSpan para medir el intervalo de tiempo.

System_CAPS_pubmethodWait(TimeSpan, CancellationToken)

Bloquea el subproceso actual hasta que el actual ManualResetEventSlim se establece mediante un TimeSpan para medir el intervalo de tiempo, mientras se observa un CancellationToken.

Puede utilizar esta clase para un mejor rendimiento que ManualResetEvent cuando se prevé que los tiempos de espera sean muy cortos y cuando el evento no cruza un límite de proceso. ManualResetEventSlim usa ocupado girando durante un período corto mientras se espera para que se señale el evento. Cuando los tiempos de espera son cortos, giro puede ser mucho más económica que espera mediante el uso de identificadores de espera. Sin embargo, si no se señala el evento en un determinado periodo de tiempo, ManualResetEventSlim recurre a una espera de identificador de evento normal.

En el ejemplo siguiente se muestra cómo utilizar un ManualResetEventSlim. Para obtener más información sobre el uso de SpinCount y otras prácticas recomendadas relativas al uso de este tipo, consulte ManualResetEvent and ManualResetEventSlim.

using System;
using System.Threading;
using System.Threading.Tasks;
class MRESDemo
{

    static void Main()
    {
        MRES_SetWaitReset();
        MRES_SpinCountWaitHandle();
    }
    // Demonstrates:
    //      ManualResetEventSlim construction
    //      ManualResetEventSlim.Wait()
    //      ManualResetEventSlim.Set()
    //      ManualResetEventSlim.Reset()
    //      ManualResetEventSlim.IsSet
    static void MRES_SetWaitReset()
    {
        ManualResetEventSlim mres1 = new ManualResetEventSlim(false); // initialize as unsignaled
        ManualResetEventSlim mres2 = new ManualResetEventSlim(false); // initialize as unsignaled
        ManualResetEventSlim mres3 = new ManualResetEventSlim(true);  // initialize as signaled

        // Start an asynchronous Task that manipulates mres3 and mres2
        var observer = Task.Factory.StartNew(() =>
        {
            mres1.Wait();
            Console.WriteLine("observer sees signaled mres1!");
            Console.WriteLine("observer resetting mres3...");
            mres3.Reset(); // should switch to unsignaled
            Console.WriteLine("observer signalling mres2");
            mres2.Set();
        });

        Console.WriteLine("main thread: mres3.IsSet = {0} (should be true)", mres3.IsSet);
        Console.WriteLine("main thread signalling mres1");
        mres1.Set(); // This will "kick off" the observer Task
        mres2.Wait(); // This won't return until observer Task has finished resetting mres3
        Console.WriteLine("main thread sees signaled mres2!");
        Console.WriteLine("main thread: mres3.IsSet = {0} (should be false)", mres3.IsSet);

        // It's good form to Dispose() a ManualResetEventSlim when you're done with it
        observer.Wait(); // make sure that this has fully completed
        mres1.Dispose();
        mres2.Dispose();
        mres3.Dispose();
    }

    // Demonstrates:
    //      ManualResetEventSlim construction w/ SpinCount
    //      ManualResetEventSlim.WaitHandle
    static void MRES_SpinCountWaitHandle()
    {
        // Construct a ManualResetEventSlim with a SpinCount of 1000
        // Higher spincount => longer time the MRES will spin-wait before taking lock
        ManualResetEventSlim mres1 = new ManualResetEventSlim(false, 1000);
        ManualResetEventSlim mres2 = new ManualResetEventSlim(false, 1000);

        Task bgTask = Task.Factory.StartNew(() =>
        {
            // Just wait a little
            Thread.Sleep(100);

            // Now signal both MRESes
            Console.WriteLine("Task signalling both MRESes");
            mres1.Set();
            mres2.Set();
        });

        // A common use of MRES.WaitHandle is to use MRES as a participant in 
        // WaitHandle.WaitAll/WaitAny.  Note that accessing MRES.WaitHandle will
        // result in the unconditional inflation of the underlying ManualResetEvent.
        WaitHandle.WaitAll(new WaitHandle[] { mres1.WaitHandle, mres2.WaitHandle });
        Console.WriteLine("WaitHandle.WaitAll(mres1.WaitHandle, mres2.WaitHandle) completed.");

        // Clean up
        bgTask.Wait();
        mres1.Dispose();
        mres2.Dispose();
    }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1

Todos los miembros públicos y protegidos de ManualResetEventSlim son seguros para subprocesos y pueden usarse simultáneamente desde varios subprocesos, con la excepción de Dispose, que sólo debe ser utilizado cuando todas las operaciones en el ManualResetEventSlim ha completado y restablecer, que sólo debe utilizarse cuando otros subprocesos no tienen acceso a los eventos.

Volver al principio
Mostrar: