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 SafeWaitHandle

 

Publicado: octubre de 2016

Representa una clase contenedora para un controlador de espera.

Espacio de nombres:   Microsoft.Win32.SafeHandles
Ensamblado:  mscorlib (en mscorlib.dll)


[SecurityCriticalAttribute]
public sealed class SafeWaitHandle : SafeHandleZeroOrMinusOneIsInvalid

NombreDescripción
System_CAPS_pubmethodSafeWaitHandle(IntPtr, Boolean)

Inicializa una nueva instancia de la clase SafeWaitHandle.

NombreDescripción
System_CAPS_pubpropertyIsClosed

Obtiene un valor que indica si el identificador está cerrado.(Heredado de SafeHandle).

System_CAPS_pubpropertyIsInvalid

Obtiene un valor que indica si el identificador no es válido.(Heredado de SafeHandleZeroOrMinusOneIsInvalid).

NombreDescripción
System_CAPS_pubmethodClose()

Marca el identificador para soltar y liberar recursos.(Heredado de SafeHandle).

System_CAPS_pubmethodDangerousAddRef(Boolean)

Incrementa manualmente el contador de referencia de las instancias SafeHandle.(Heredado de SafeHandle).

System_CAPS_pubmethodDangerousGetHandle()

Devuelve el valor del campo handle.(Heredado de SafeHandle).

System_CAPS_pubmethodDangerousRelease()

Disminuye manualmente el contador de referencia de la instancia SafeHandle.(Heredado de SafeHandle).

System_CAPS_pubmethodDispose()

Libera todos los recursos que usa la clase SafeHandle.(Heredado de SafeHandle).

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(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_pubmethodSetHandleAsInvalid()

Marca un identificador para indicar que ya no se utiliza.(Heredado de SafeHandle).

System_CAPS_pubmethodToString()

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

La SafeWaitHandle clase es utilizada por la System.Threading.WaitHandle clase. Es un contenedor para las exclusiones mutuas de Win32 y auto y eventos de restablecimiento manual.

System_CAPS_importantImportante

Este tipo implementa la IDisposable interfaz. Cuando haya terminado de utilizar el tipo, debería eliminar, directa o indirectamente. Para deshacerse del tipo directamente, llame a su Dispose método en un try/catch bloque. Para deshacerse de él indirectamente, usar una construcción de lenguaje como using (en C#) o Using (en Visual Basic). Para obtener más información, consulte la sección "Uso de un objeto que implementa IDisposable" en el IDisposable tema de la interfaz.

En el ejemplo de código siguiente se muestra cómo utilizar la interoperabilidad para crear una exclusión mutua con el SafeWaitHandle clase y el no administrado CreateMutex (función).

using System;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;


class SafeHandlesExample
{

    static void Main()
    {
        UnmanagedMutex uMutex = new UnmanagedMutex("YourCompanyName_SafeHandlesExample_MUTEX");

        try
        {

            uMutex.Create();
            Console.WriteLine("Mutex created. Press Enter to release it.");
            Console.ReadLine();


        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
        finally
        {
            uMutex.Release();
            Console.WriteLine("Mutex Released.");
        }

        Console.ReadLine();


    }
}

class UnmanagedMutex 
{


    // Use interop to call the CreateMutex function.
    // For more information about CreateMutex,
    // see the unmanaged MSDN reference library.
    [DllImport("kernel32.dll", CharSet=CharSet.Unicode)]
    static extern SafeWaitHandle CreateMutex(IntPtr lpMutexAttributes, bool bInitialOwner,
    string lpName);


    // Use interop to call the ReleaseMutex function.
    // For more information about ReleaseMutex,
    // see the unmanaged MSDN reference library.
    [DllImport("kernel32.dll")]
    public static extern bool ReleaseMutex(SafeWaitHandle hMutex);



    private SafeWaitHandle handleValue = null;
    private IntPtr mutexAttrValue = IntPtr.Zero;
    private string nameValue = null;

    public UnmanagedMutex(string Name)
    {
        nameValue = Name;
    }


    public void Create()
    {
        if (nameValue == null && nameValue.Length == 0)
        {
            throw new ArgumentNullException("nameValue");
        }

        handleValue = CreateMutex(mutexAttrValue,
                                        true, nameValue);

        // If the handle is invalid,
        // get the last Win32 error 
        // and throw a Win32Exception.
        if (handleValue.IsInvalid)
        {
            Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
        }
    }

    public SafeWaitHandle Handle
    {
        get
        {
            // If the handle is valid,
            // return it.
            if (!handleValue.IsInvalid)
            {
                return handleValue;
            }
            else
            {
                return null;
            }
        }

    }

    public string Name
    {
        get
        {
            return nameValue;
        }

    }


    public void Release()
    {
        ReleaseMutex(handleValue);
    }

}

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Plataforma universal de Windows
Disponible desde 10
.NET Framework
Disponible desde 2.0
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: