SafeWaitHandle Constructors

Definition

Overloads

SafeWaitHandle()

Creates a SafeWaitHandle.

SafeWaitHandle(IntPtr, Boolean)

Initializes a new instance of the SafeWaitHandle class.

SafeWaitHandle()

Source:
SafeWaitHandle.cs
Source:
SafeWaitHandle.cs
Source:
SafeWaitHandle.cs

Creates a SafeWaitHandle.

C#
public SafeWaitHandle();

Applies to

.NET 10 ja muut versiot
Tuote Versiot
.NET 6, 7, 8, 9, 10

SafeWaitHandle(IntPtr, Boolean)

Source:
SafeWaitHandle.cs
Source:
SafeWaitHandle.cs
Source:
SafeWaitHandle.cs

Initializes a new instance of the SafeWaitHandle class.

C#
public SafeWaitHandle(IntPtr existingHandle, bool ownsHandle);

Parameters

existingHandle
IntPtr

An IntPtr object that represents the pre-existing handle to use.

ownsHandle
Boolean

true to reliably release the handle during the finalization phase; false to prevent reliable release (not recommended).

Examples

The following code example demonstrates how to use interop to create a mutex using the SafeWaitHandle class and the unmanaged CreateMutex function.

C#
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 IntPtr CreateMutex(IntPtr lpMutexAttributes, bool bInitialOwner,
   string lpName);

    [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");
        }

         IntPtr ptr = CreateMutex(mutexAttrValue,
                                        true, nameValue);

         handleValue = new SafeWaitHandle(ptr, true);

         // 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);
    }
}

See also

Applies to

.NET 10 ja muut versiot
Tuote Versiot
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0