EventWaitHandle Konstruktory

Definice

Inicializuje novou instanci EventWaitHandle třídy.

Přetížení

Name Description
EventWaitHandle(Boolean, EventResetMode)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována a zda se resetuje automaticky nebo ručně.

EventWaitHandle(Boolean, EventResetMode, String)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována, pokud je vytvořena v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, a název události synchronizace systému.

EventWaitHandle(Boolean, EventResetMode, String, Boolean)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, název události synchronizace systému a logická proměnná, jejíž hodnota po volání označuje, zda pojmenovaná systémová událost byla vytvořena.

EventWaitHandle(Boolean, EventResetMode, String, NamedWaitHandleOptions)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je čekací popisovač původně signalizován, pokud je vytvořen v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, název události synchronizace systému a možnosti pro nastavení přístupu v oboru uživatele a relace.

EventWaitHandle(Boolean, EventResetMode, String, Boolean, EventWaitHandleSecurity)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována, pokud je vytvořena v důsledku tohoto volání, zda se automaticky nebo ručně resetuje, název události synchronizace systému, logickou proměnnou, jejíž hodnota po volání označuje, zda byla vytvořena pojmenovaná systémová událost, a zabezpečení řízení přístupu, které se má použít na pojmenovanou událost, pokud je vytvořena.

EventWaitHandle(Boolean, EventResetMode, String, NamedWaitHandleOptions, Boolean)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována, pokud je vytvořena v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, název události synchronizace systému, možnosti nastavení přístupu k oboru uživatele a relace oboru a logická proměnná, jejíž hodnota po volání označuje, zda pojmenovaná systémová událost byla vytvořena.

EventWaitHandle(Boolean, EventResetMode)

Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována a zda se resetuje automaticky nebo ručně.

public:
 EventWaitHandle(bool initialState, System::Threading::EventResetMode mode);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode);
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode -> System.Threading.EventWaitHandle
Public Sub New (initialState As Boolean, mode As EventResetMode)

Parametry

initialState
Boolean

true nastavit počáteční stav, který má být signalován; false a nastavte ho na nepřiřazené.

mode
EventResetMode

Jedna z EventResetMode hodnot, která určuje, jestli se událost resetuje automaticky nebo ručně.

Výjimky

Hodnota mode výčtu byla mimo právní rozsah.

Příklady

Následující příklad kódu používá SignalAndWait(WaitHandle, WaitHandle) přetížení metody, aby hlavní vlákno signalizovalo blokované vlákno a pak počkejte, až vlákno dokončí úlohu.

Příklad spustí pět vláken a umožní jim blokovat na vytvořeném EventWaitHandle příznaku EventResetMode.AutoReset a pak uvolní jedno vlákno pokaždé, když uživatel stiskne klávesu Enter . Příklad pak zařadí do fronty dalších pět vláken a uvolní je všechny pomocí vytvořeného EventWaitHandle příznaku EventResetMode.ManualReset .

using System;
using System.Threading;

public class Example
{
    // The EventWaitHandle used to demonstrate the difference
    // between AutoReset and ManualReset synchronization events.
    //
    private static EventWaitHandle ewh;

    // A counter to make sure all threads are started and
    // blocked before any are released. A Long is used to show
    // the use of the 64-bit Interlocked methods.
    //
    private static long threadCount = 0;

    // An AutoReset event that allows the main thread to block
    // until an exiting thread has decremented the count.
    //
    private static EventWaitHandle clearCount = 
        new EventWaitHandle(false, EventResetMode.AutoReset);

    [MTAThread]
    public static void Main()
    {
        // Create an AutoReset EventWaitHandle.
        //
        ewh = new EventWaitHandle(false, EventResetMode.AutoReset);

        // Create and start five numbered threads. Use the
        // ParameterizedThreadStart delegate, so the thread
        // number can be passed as an argument to the Start 
        // method.
        for (int i = 0; i <= 4; i++)
        {
            Thread t = new Thread(
                new ParameterizedThreadStart(ThreadProc)
            );
            t.Start(i);
        }

        // Wait until all the threads have started and blocked.
        // When multiple threads use a 64-bit value on a 32-bit
        // system, you must access the value through the
        // Interlocked class to guarantee thread safety.
        //
        while (Interlocked.Read(ref threadCount) < 5)
        {
            Thread.Sleep(500);
        }

        // Release one thread each time the user presses ENTER,
        // until all threads have been released.
        //
        while (Interlocked.Read(ref threadCount) > 0)
        {
            Console.WriteLine("Press ENTER to release a waiting thread.");
            Console.ReadLine();

            // SignalAndWait signals the EventWaitHandle, which
            // releases exactly one thread before resetting, 
            // because it was created with AutoReset mode. 
            // SignalAndWait then blocks on clearCount, to 
            // allow the signaled thread to decrement the count
            // before looping again.
            //
            WaitHandle.SignalAndWait(ewh, clearCount);
        }
        Console.WriteLine();

        // Create a ManualReset EventWaitHandle.
        //
        ewh = new EventWaitHandle(false, EventResetMode.ManualReset);

        // Create and start five more numbered threads.
        //
        for(int i=0; i<=4; i++)
        {
            Thread t = new Thread(
                new ParameterizedThreadStart(ThreadProc)
            );
            t.Start(i);
        }

        // Wait until all the threads have started and blocked.
        //
        while (Interlocked.Read(ref threadCount) < 5)
        {
            Thread.Sleep(500);
        }

        // Because the EventWaitHandle was created with
        // ManualReset mode, signaling it releases all the
        // waiting threads.
        //
        Console.WriteLine("Press ENTER to release the waiting threads.");
        Console.ReadLine();
        ewh.Set();
    }

    public static void ThreadProc(object data)
    {
        int index = (int) data;

        Console.WriteLine("Thread {0} blocks.", data);
        // Increment the count of blocked threads.
        Interlocked.Increment(ref threadCount);

        // Wait on the EventWaitHandle.
        ewh.WaitOne();

        Console.WriteLine("Thread {0} exits.", data);
        // Decrement the count of blocked threads.
        Interlocked.Decrement(ref threadCount);

        // After signaling ewh, the main thread blocks on
        // clearCount until the signaled thread has 
        // decremented the count. Signal it now.
        //
        clearCount.Set();
    }
}
Imports System.Threading

Public Class Example

    ' The EventWaitHandle used to demonstrate the difference
    ' between AutoReset and ManualReset synchronization events.
    '
    Private Shared ewh As EventWaitHandle

    ' A counter to make sure all threads are started and
    ' blocked before any are released. A Long is used to show
    ' the use of the 64-bit Interlocked methods.
    '
    Private Shared threadCount As Long = 0

    ' An AutoReset event that allows the main thread to block
    ' until an exiting thread has decremented the count.
    '
    Private Shared clearCount As New EventWaitHandle(False, _
        EventResetMode.AutoReset)

    <MTAThread> _
    Public Shared Sub Main()

        ' Create an AutoReset EventWaitHandle.
        '
        ewh = New EventWaitHandle(False, EventResetMode.AutoReset)

        ' Create and start five numbered threads. Use the
        ' ParameterizedThreadStart delegate, so the thread
        ' number can be passed as an argument to the Start 
        ' method.
        For i As Integer = 0 To 4
            Dim t As New Thread(AddressOf ThreadProc)
            t.Start(i)
        Next i

        ' Wait until all the threads have started and blocked.
        ' When multiple threads use a 64-bit value on a 32-bit
        ' system, you must access the value through the
        ' Interlocked class to guarantee thread safety.
        '
        While Interlocked.Read(threadCount) < 5
            Thread.Sleep(500)
        End While

        ' Release one thread each time the user presses ENTER,
        ' until all threads have been released.
        '
        While Interlocked.Read(threadCount) > 0
            Console.WriteLine("Press ENTER to release a waiting thread.")
            Console.ReadLine()

            ' SignalAndWait signals the EventWaitHandle, which
            ' releases exactly one thread before resetting, 
            ' because it was created with AutoReset mode. 
            ' SignalAndWait then blocks on clearCount, to 
            ' allow the signaled thread to decrement the count
            ' before looping again.
            '
            WaitHandle.SignalAndWait(ewh, clearCount)
        End While
        Console.WriteLine()

        ' Create a ManualReset EventWaitHandle.
        '
        ewh = New EventWaitHandle(False, EventResetMode.ManualReset)

        ' Create and start five more numbered threads.
        '
        For i As Integer = 0 To 4
            Dim t As New Thread(AddressOf ThreadProc)
            t.Start(i)
        Next i

        ' Wait until all the threads have started and blocked.
        '
        While Interlocked.Read(threadCount) < 5
            Thread.Sleep(500)
        End While

        ' Because the EventWaitHandle was created with
        ' ManualReset mode, signaling it releases all the
        ' waiting threads.
        '
        Console.WriteLine("Press ENTER to release the waiting threads.")
        Console.ReadLine()
        ewh.Set()
        
    End Sub

    Public Shared Sub ThreadProc(ByVal data As Object)
        Dim index As Integer = CInt(data)

        Console.WriteLine("Thread {0} blocks.", data)
        ' Increment the count of blocked threads.
        Interlocked.Increment(threadCount)

        ' Wait on the EventWaitHandle.
        ewh.WaitOne()

        Console.WriteLine("Thread {0} exits.", data)
        ' Decrement the count of blocked threads.
        Interlocked.Decrement(threadCount)

        ' After signaling ewh, the main thread blocks on
        ' clearCount until the signaled thread has 
        ' decremented the count. Signal it now.
        '
        clearCount.Set()
    End Sub
End Class

Poznámky

Pokud je počáteční stav události nepodepsaný, vlákna, která čekají na událost, se zablokují. Pokud je počáteční stav signalován a ManualReset příznak je zadán pro mode, vlákna, která čekají na událost, nebudou blokovat. Pokud je počáteční stav signalován a mode je AutoReset, první vlákno, které čeká na událost, bude vydáno okamžitě, po které událost resetuje, a následné vlákna budou blokovat.

Viz také

Platí pro

EventWaitHandle(Boolean, EventResetMode, String)

Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována, pokud je vytvořena v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, a název události synchronizace systému.

public:
 EventWaitHandle(bool initialState, System::Threading::EventResetMode mode, System::String ^ name);
[System.Security.SecurityCritical]
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string name);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string? name);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string name);
[<System.Security.SecurityCritical>]
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string -> System.Threading.EventWaitHandle
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string -> System.Threading.EventWaitHandle
Public Sub New (initialState As Boolean, mode As EventResetMode, name As String)

Parametry

initialState
Boolean

true nastavit počáteční stav signalizovat, pokud je pojmenovaná událost vytvořena v důsledku tohoto volání; false a nastavte ho na nepřiřazené.

mode
EventResetMode

Jedna z EventResetMode hodnot, která určuje, jestli se událost resetuje automaticky nebo ručně.

name
String

Název, pokud je synchronizační objekt sdílen s jinými procesy; null v opačném případě nebo prázdný řetězec. V názvu se rozlišují malá a velká písmena. Znak zpětného lomítka (\) je vyhrazen a lze jej použít pouze k určení oboru názvů. Další informace o oborech názvů najdete v části Poznámky. V závislosti na operačním systému můžou existovat další omezení názvu. Například v operačních systémech se systémem Unix musí být název po vyloučení oboru názvů platným názvem souboru.

Atributy

Výjimky

name je neplatný. Může to být z různých důvodů, včetně některých omezení, která může operační systém umístit, například neznámé předpony nebo neplatné znaky. Všimněte si, že název a běžné předpony "Global\" a "Local\" rozlišují malá a velká písmena.

nebo

Došlo k nějaké jiné chybě. Vlastnost HResult může poskytnout další informace.

pouze Windows: name zadal neznámý obor názvů. Další informace najdete v tématu Názvy objektů .

name je příliš dlouhý. Omezení délky můžou záviset na operačním systému nebo konfiguraci.

Pojmenovaná událost existuje a má zabezpečení řízení přístupu, ale uživatel nemá FullControl.

Synchronizační objekt se zadaným objektem name nelze vytvořit. Synchronizační objekt jiného typu může mít stejný název.

Hodnota mode výčtu byla mimo právní rozsah.

nebo

pouze .NET Framework: name je delší než MAX_PATH (260 znaků).

Poznámky

Může name mít předponu Global\ nebo Local\ zadat obor názvů. Global Po zadání oboru názvů lze synchronizační objekt sdílet s libovolnými procesy v systému. Local Pokud je zadán obor názvů, což je také výchozí, pokud není zadán žádný obor názvů, lze synchronizační objekt sdílet s procesy ve stejné relaci. Na Windows je relace relace přihlášení a služby se obvykle spouští v jiné neinteraktivní relaci. V operačních systémech Unix má každé prostředí vlastní relaci. Objekty místní synchronizace relace můžou být vhodné pro synchronizaci mezi procesy se vztahem nadřazenosti nebo podřízenosti, kde se všechny spouští ve stejné relaci. Další informace o názvech synchronizačních objektů v Windows najdete v tématu Názvové objektyobjektu.

name Pokud je zadaný objekt synchronizace požadovaného typu již v oboru názvů existuje, otevře se existující objekt synchronizace. Pokud synchronizační objekt jiného typu již v oboru názvů existuje, WaitHandleCannotBeOpenedException vyvolá se vyvolá. V opačném případě se vytvoří nový synchronizační objekt.

Pokud systémová událost se zadaným názvem parametru name již existuje, initialState parametr se ignoruje.

Caution

Ve výchozím nastavení není pojmenovaná událost omezena na uživatele, který ji vytvořil. Ostatní uživatelé můžou událost otevřít a používat, včetně narušení události nastavením nebo nevhodným resetováním události. Chcete-li omezit přístup na konkrétní uživatele, můžete použít přetížení konstruktoru nebo EventWaitHandleAcl předat EventWaitHandleSecurity při vytváření pojmenované události. Vyhněte se používání pojmenovaných událostí bez omezení přístupu v systémech, které můžou mít nedůvěryhodné uživatele se spuštěným kódem.

Důležité

Při použití tohoto konstruktoru pro pojmenované systémové události, zadejte false pro initialState. Tento konstruktor neposkytuje žádný způsob, jak určit, zda byla vytvořena pojmenovaná systémová událost, takže nelze provést žádné předpoklady o stavu pojmenované události. Chcete-li zjistit, zda byla vytvořena pojmenovaná událost, použijte EventWaitHandle(Boolean, EventResetMode, String, Boolean) konstruktor nebo EventWaitHandle(Boolean, EventResetMode, String, Boolean, EventWaitHandleSecurity) konstruktor.

Pokud je počáteční stav události nepodepsaný, vlákna, která čekají na událost, se zablokují. Pokud je počáteční stav signalován a ManualReset příznak je zadán pro mode, vlákna, která čekají na událost, nebudou blokovat. Pokud je počáteční stav signalován a mode je AutoReset, první vlákno, které čeká na událost, bude vydáno okamžitě, po které událost resetuje, a následné vlákna budou blokovat.

Viz také

Platí pro

EventWaitHandle(Boolean, EventResetMode, String, Boolean)

Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, název události synchronizace systému a logická proměnná, jejíž hodnota po volání označuje, zda pojmenovaná systémová událost byla vytvořena.

public:
 EventWaitHandle(bool initialState, System::Threading::EventResetMode mode, System::String ^ name, [Runtime::InteropServices::Out] bool % createdNew);
[System.Security.SecurityCritical]
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string name, out bool createdNew);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string? name, out bool createdNew);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string name, out bool createdNew);
[<System.Security.SecurityCritical>]
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string * bool -> System.Threading.EventWaitHandle
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string * bool -> System.Threading.EventWaitHandle
Public Sub New (initialState As Boolean, mode As EventResetMode, name As String, ByRef createdNew As Boolean)

Parametry

initialState
Boolean

true nastavit počáteční stav signalizovat, pokud je pojmenovaná událost vytvořena v důsledku tohoto volání; false a nastavte ho na nepřiřazené.

mode
EventResetMode

Jedna z EventResetMode hodnot, která určuje, jestli se událost resetuje automaticky nebo ručně.

name
String

Název, pokud je synchronizační objekt sdílen s jinými procesy; null v opačném případě nebo prázdný řetězec. V názvu se rozlišují malá a velká písmena. Znak zpětného lomítka (\) je vyhrazen a lze jej použít pouze k určení oboru názvů. Další informace o oborech názvů najdete v části Poznámky. V závislosti na operačním systému můžou existovat další omezení názvu. Například v operačních systémech se systémem Unix musí být název po vyloučení oboru názvů platným názvem souboru.

createdNew
Boolean

Když tato metoda vrátí, obsahuje true , zda byla vytvořena místní událost (to znamená, je-li namenull nebo prázdný řetězec) nebo pokud zadaná pojmenovaná systémová událost byla vytvořena; false pokud zadaná pojmenovaná systémová událost již existovala. Tento parametr se předává neinicializovaný.

Atributy

Výjimky

name je neplatný. Může to být z různých důvodů, včetně některých omezení, která může operační systém umístit, například neznámé předpony nebo neplatné znaky. Všimněte si, že název a běžné předpony "Global\" a "Local\" rozlišují malá a velká písmena.

nebo

Došlo k nějaké jiné chybě. Vlastnost HResult může poskytnout další informace.

pouze Windows: name zadal neznámý obor názvů. Další informace najdete v tématu Názvy objektů .

name je příliš dlouhý. Omezení délky můžou záviset na operačním systému nebo konfiguraci.

Pojmenovaná událost existuje a má zabezpečení řízení přístupu, ale uživatel nemá FullControl.

Synchronizační objekt se zadaným objektem name nelze vytvořit. Synchronizační objekt jiného typu může mít stejný název.

Hodnota mode výčtu byla mimo právní rozsah.

nebo

pouze .NET Framework: name je delší než MAX_PATH (260 znaků).

Poznámky

Může name mít předponu Global\ nebo Local\ zadat obor názvů. Global Po zadání oboru názvů lze synchronizační objekt sdílet s libovolnými procesy v systému. Local Pokud je zadán obor názvů, což je také výchozí, pokud není zadán žádný obor názvů, lze synchronizační objekt sdílet s procesy ve stejné relaci. Na Windows je relace relace přihlášení a služby se obvykle spouští v jiné neinteraktivní relaci. V operačních systémech Unix má každé prostředí vlastní relaci. Objekty místní synchronizace relace můžou být vhodné pro synchronizaci mezi procesy se vztahem nadřazenosti nebo podřízenosti, kde se všechny spouští ve stejné relaci. Další informace o názvech synchronizačních objektů v Windows najdete v tématu Názvové objektyobjektu.

name Pokud je zadaný objekt synchronizace požadovaného typu již v oboru názvů existuje, otevře se existující objekt synchronizace. Pokud synchronizační objekt jiného typu již v oboru názvů existuje, WaitHandleCannotBeOpenedException vyvolá se vyvolá. V opačném případě se vytvoří nový synchronizační objekt.

Pokud systémová událost se zadaným názvem parametru name již existuje, initialState parametr se ignoruje. Po volání tohoto konstruktoru použijte hodnotu v proměnné zadané pro parametr ref (ByRef parametr v Visual Basic)createdNew určit, zda pojmenovaná systémová událost již existovala nebo byla vytvořena.

Pokud je počáteční stav události nepodepsaný, vlákna, která čekají na událost, se zablokují. Pokud je počáteční stav signalován a ManualReset příznak je zadán pro mode, vlákna, která čekají na událost, nebudou blokovat. Pokud je počáteční stav signalován a mode je AutoReset, první vlákno, které čeká na událost, bude vydáno okamžitě, po které událost resetuje, a následné vlákna budou blokovat.

Caution

Ve výchozím nastavení není pojmenovaná událost omezena na uživatele, který ji vytvořil. Ostatní uživatelé můžou událost otevřít a používat, včetně narušení události nastavením nebo nevhodným resetováním události. Chcete-li omezit přístup na konkrétní uživatele, můžete použít přetížení konstruktoru nebo EventWaitHandleAcl předat EventWaitHandleSecurity při vytváření pojmenované události. Vyhněte se používání pojmenovaných událostí bez omezení přístupu v systémech, které můžou mít nedůvěryhodné uživatele se spuštěným kódem.

Viz také

Platí pro

EventWaitHandle(Boolean, EventResetMode, String, NamedWaitHandleOptions)

Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je čekací popisovač původně signalizován, pokud je vytvořen v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, název události synchronizace systému a možnosti pro nastavení přístupu v oboru uživatele a relace.

public:
 EventWaitHandle(bool initialState, System::Threading::EventResetMode mode, System::String ^ name, System::Threading::NamedWaitHandleOptions options);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string? name, System.Threading.NamedWaitHandleOptions options);
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string * System.Threading.NamedWaitHandleOptions -> System.Threading.EventWaitHandle
Public Sub New (initialState As Boolean, mode As EventResetMode, name As String, options As NamedWaitHandleOptions)

Parametry

initialState
Boolean

true nastavit počáteční stav signalizovat, pokud je pojmenovaná událost vytvořena v důsledku tohoto volání; false a nastavte ho na nepřiřazené.

mode
EventResetMode

Jedna z EventResetMode hodnot, která určuje, jestli se událost resetuje automaticky nebo ručně.

name
String

Název, pokud je synchronizační objekt sdílen s jinými procesy; null v opačném případě nebo prázdný řetězec. V názvu se rozlišují malá a velká písmena.

options
NamedWaitHandleOptions

Možnosti oboru pro pojmenovaný popisovač. Ve výchozím nastavení je přístup omezený pouze na aktuálního uživatele a aktuální relaci. Zadané možnosti mohou ovlivnit obor názvů názvu a přístupu k podkladovému objektu popisovače.

Výjimky

name je neplatný. Může to být z různých důvodů, včetně některých omezení, která může operační systém umístit, například neznámé předpony nebo neplatné znaky. Všimněte si, že název a běžné předpony "Global\" a "Local\" rozlišují malá a velká písmena.

nebo

Došlo k nějaké jiné chybě. Vlastnost HResult může poskytnout další informace.

pouze Windows: name zadal neznámý obor názvů. Další informace najdete v tématu Názvy objektů .

name je příliš dlouhý. Omezení délky můžou záviset na operačním systému nebo konfiguraci.

Pojmenovaná událost existuje a má zabezpečení řízení přístupu, ale uživatel nemá FullControl.

Synchronizační objekt se zadaným objektem name nelze vytvořit. Synchronizační objekt jiného typu může mít stejný název. nebo

Objekt se zadaným name objektem existuje, ale zadaný options objekt není kompatibilní s možnostmi existujícího objektu.

Hodnota mode výčtu byla mimo právní rozsah.

Poznámky

name Pokud je zadaný objekt synchronizace požadovaného typu již v oboru názvů existuje, otevře se existující objekt synchronizace. Pokud options však určuje přístup omezený na aktuálního uživatele a synchronizační objekt není kompatibilní s ním, WaitHandleCannotBeOpenedException vyvolá se vyvolá. Pokud synchronizační objekt jiného typu již v oboru názvů existuje, WaitHandleCannotBeOpenedException vyvolá se i objekt synchronizace. V opačném případě se vytvoří nový synchronizační objekt.

Pokud systémová událost se zadaným názvem parametru name již existuje, initialState parametr se ignoruje.

Důležité

Při použití tohoto konstruktoru pro pojmenované systémové události, zadejte false pro initialState. Tento konstruktor neposkytuje žádný způsob, jak určit, zda byla vytvořena pojmenovaná systémová událost, takže nemůžete provádět žádné předpoklady o stavu pojmenované události. Chcete-li zjistit, zda byla vytvořena pojmenovaná událost, použijte EventWaitHandle(Boolean, EventResetMode, String, Boolean) konstruktor nebo EventWaitHandle(Boolean, EventResetMode, String, Boolean, EventWaitHandleSecurity) konstruktor.

Pokud je počáteční stav události nepodepsaný, vlákna, která čekají na událost, se zablokují. Pokud je počáteční stav signalován a ManualReset příznak je zadán pro mode, vlákna, která čekají na událost, nebudou blokovat. Pokud je počáteční stav signalován a mode je AutoReset, první vlákno, které čeká na událost, bude vydáno okamžitě, po kterém událost resetuje a následná vlákna budou blokována.

Na Windows lze zadat options, aby bylo možné určit, jestli je pojmenovaná systémová událost přístupná pouze aktuálnímu uživateli, nebo všem uživatelům. Umožňuje také určit, jestli je pojmenovaná systémová událost přístupná pouze procesům v aktuální relaci, nebo pro všechny relace. Další informace najdete na webu NamedWaitHandleOptions.

Caution

V operačních systémech se systémem Unix nemá parametr žádný vliv, options protože pojmenované systémové události nejsou podporovány.

Viz také

Platí pro

EventWaitHandle(Boolean, EventResetMode, String, Boolean, EventWaitHandleSecurity)

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována, pokud je vytvořena v důsledku tohoto volání, zda se automaticky nebo ručně resetuje, název události synchronizace systému, logickou proměnnou, jejíž hodnota po volání označuje, zda byla vytvořena pojmenovaná systémová událost, a zabezpečení řízení přístupu, které se má použít na pojmenovanou událost, pokud je vytvořena.

public:
 EventWaitHandle(bool initialState, System::Threading::EventResetMode mode, System::String ^ name, [Runtime::InteropServices::Out] bool % createdNew, System::Security::AccessControl::EventWaitHandleSecurity ^ eventSecurity);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string name, out bool createdNew, System.Security.AccessControl.EventWaitHandleSecurity eventSecurity);
[System.Security.SecurityCritical]
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string name, out bool createdNew, System.Security.AccessControl.EventWaitHandleSecurity eventSecurity);
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string * bool * System.Security.AccessControl.EventWaitHandleSecurity -> System.Threading.EventWaitHandle
[<System.Security.SecurityCritical>]
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string * bool * System.Security.AccessControl.EventWaitHandleSecurity -> System.Threading.EventWaitHandle
Public Sub New (initialState As Boolean, mode As EventResetMode, name As String, ByRef createdNew As Boolean, eventSecurity As EventWaitHandleSecurity)

Parametry

initialState
Boolean

true nastavit počáteční stav signalizovat, pokud je pojmenovaná událost vytvořena v důsledku tohoto volání; false a nastavte ho na nepřiřazené.

mode
EventResetMode

Jedna z EventResetMode hodnot, která určuje, jestli se událost resetuje automaticky nebo ručně.

name
String

Název, pokud je synchronizační objekt sdílen s jinými procesy; null v opačném případě nebo prázdný řetězec. V názvu se rozlišují malá a velká písmena. Znak zpětného lomítka (\) je vyhrazen a lze jej použít pouze k určení oboru názvů. Další informace o oborech názvů najdete v části Poznámky. V závislosti na operačním systému můžou existovat další omezení názvu. Například v operačních systémech se systémem Unix musí být název po vyloučení oboru názvů platným názvem souboru.

createdNew
Boolean

Když tato metoda vrátí, obsahuje true , zda byla vytvořena místní událost (to znamená, je-li namenull nebo prázdný řetězec) nebo pokud zadaná pojmenovaná systémová událost byla vytvořena; false pokud zadaná pojmenovaná systémová událost již existovala. Tento parametr se předává neinicializovaný.

eventSecurity
EventWaitHandleSecurity

Objekt EventWaitHandleSecurity , který představuje zabezpečení řízení přístupu, které se má použít na pojmenovanou systémovou událost.

Atributy

Výjimky

name je neplatný. Může to být z různých důvodů, včetně některých omezení, která může operační systém umístit, například neznámé předpony nebo neplatné znaky. Všimněte si, že název a běžné předpony "Global\" a "Local\" rozlišují malá a velká písmena.

nebo

Došlo k nějaké jiné chybě. Vlastnost HResult může poskytnout další informace.

pouze Windows: name zadal neznámý obor názvů. Další informace najdete v tématu Názvy objektů .

name je příliš dlouhý. Omezení délky můžou záviset na operačním systému nebo konfiguraci.

Pojmenovaná událost existuje a má zabezpečení řízení přístupu, ale uživatel nemá FullControl.

Synchronizační objekt se zadaným objektem name nelze vytvořit. Synchronizační objekt jiného typu může mít stejný název.

Hodnota mode výčtu byla mimo právní rozsah.

nebo

pouze .NET Framework: name je delší než MAX_PATH (260 znaků).

Příklady

Následující příklad kódu ukazuje chování křížového procesu pojmenované systémové události se zabezpečením řízení přístupu. Příklad používá OpenExisting(String) přetížení metody k otestování existence pojmenované události.

Pokud událost neexistuje, vytvoří se s počátečním vlastnictvím a zabezpečením řízení přístupu, které aktuálnímu uživateli odepře právo použít událost, ale udělí oprávnění ke čtení a změně oprávnění k události.

Pokud spustíte zkompilovaný příklad ze dvou oken příkazů, druhá kopie vyvolá výjimku porušení přístupu při volání OpenExisting(String). Výjimka je zachycena a příklad používá OpenExisting(String, EventWaitHandleRights) přetížení metody k čekání na událost s právy potřebnými ke čtení a změně oprávnění.

Po změně oprávnění se událost otevře s právy potřebnými k čekání na ni a signalizovat ji. Pokud spustíte zkompilovaný příklad z třetího příkazového okna, příklad se spustí pomocí nových oprávnění.

using System;
using System.Threading;
using System.Security.AccessControl;

internal class Example
{
    internal static void Main()
    {
        const string ewhName = "EventWaitHandleExample5";

        EventWaitHandle ewh = null;
        bool doesNotExist = false;
        bool unauthorized = false;

        // The value of this variable is set by the event
        // constructor. It is true if the named system event was
        // created, and false if the named event already existed.
        //
        bool wasCreated;

        // Attempt to open the named event.
        try
        {
            // Open the event with (EventWaitHandleRights.Synchronize
            // | EventWaitHandleRights.Modify), to wait on and 
            // signal the named event.
            //
            ewh = EventWaitHandle.OpenExisting(ewhName);
        }
        catch (WaitHandleCannotBeOpenedException)
        {
            Console.WriteLine("Named event does not exist.");
            doesNotExist = true;
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("Unauthorized access: {0}", ex.Message);
            unauthorized = true;
        }

        // There are three cases: (1) The event does not exist.
        // (2) The event exists, but the current user doesn't 
        // have access. (3) The event exists and the user has
        // access.
        //
        if (doesNotExist)
        {
            // The event does not exist, so create it.

            // Create an access control list (ACL) that denies the
            // current user the right to wait on or signal the 
            // event, but allows the right to read and change
            // security information for the event.
            //
            string user = Environment.UserDomainName + "\\"
                + Environment.UserName;
            EventWaitHandleSecurity ewhSec = 
                new EventWaitHandleSecurity();

            EventWaitHandleAccessRule rule = 
                new EventWaitHandleAccessRule(user, 
                    EventWaitHandleRights.Synchronize | 
                    EventWaitHandleRights.Modify, 
                    AccessControlType.Deny);
            ewhSec.AddAccessRule(rule);

            rule = new EventWaitHandleAccessRule(user, 
                EventWaitHandleRights.ReadPermissions | 
                EventWaitHandleRights.ChangePermissions, 
                AccessControlType.Allow);
            ewhSec.AddAccessRule(rule);

            // Create an EventWaitHandle object that represents
            // the system event named by the constant 'ewhName', 
            // initially signaled, with automatic reset, and with
            // the specified security access. The Boolean value that 
            // indicates creation of the underlying system object
            // is placed in wasCreated.
            //
            ewh = new EventWaitHandle(true, 
                EventResetMode.AutoReset, 
                ewhName, 
                out wasCreated, 
                ewhSec);

            // If the named system event was created, it can be
            // used by the current instance of this program, even 
            // though the current user is denied access. The current
            // program owns the event. Otherwise, exit the program.
            // 
            if (wasCreated)
            {
                Console.WriteLine("Created the named event.");
            }
            else
            {
                Console.WriteLine("Unable to create the event.");
                return;
            }
        }
        else if (unauthorized)
        {
            // Open the event to read and change the access control
            // security. The access control security defined above
            // allows the current user to do this.
            //
            try
            {
                ewh = EventWaitHandle.OpenExisting(ewhName, 
                    EventWaitHandleRights.ReadPermissions | 
                    EventWaitHandleRights.ChangePermissions);

                // Get the current ACL. This requires 
                // EventWaitHandleRights.ReadPermissions.
                EventWaitHandleSecurity ewhSec = ewh.GetAccessControl();
                
                string user = Environment.UserDomainName + "\\"
                    + Environment.UserName;

                // First, the rule that denied the current user 
                // the right to enter and release the event must
                // be removed.
                EventWaitHandleAccessRule rule = 
                    new EventWaitHandleAccessRule(user, 
                        EventWaitHandleRights.Synchronize | 
                        EventWaitHandleRights.Modify, 
                        AccessControlType.Deny);
                ewhSec.RemoveAccessRule(rule);

                // Now grant the user the correct rights.
                // 
                rule = new EventWaitHandleAccessRule(user, 
                    EventWaitHandleRights.Synchronize | 
                    EventWaitHandleRights.Modify, 
                    AccessControlType.Allow);
                ewhSec.AddAccessRule(rule);

                // Update the ACL. This requires
                // EventWaitHandleRights.ChangePermissions.
                ewh.SetAccessControl(ewhSec);

                Console.WriteLine("Updated event security.");

                // Open the event with (EventWaitHandleRights.Synchronize 
                // | EventWaitHandleRights.Modify), the rights required
                // to wait on and signal the event.
                //
                ewh = EventWaitHandle.OpenExisting(ewhName);
            }
            catch (UnauthorizedAccessException ex)
            {
                Console.WriteLine("Unable to change permissions: {0}",
                    ex.Message);
                return;
            }
        }

        // Wait on the event, and hold it until the program
        // exits.
        //
        try
        {
            Console.WriteLine("Wait on the event.");
            ewh.WaitOne();
            Console.WriteLine("Event was signaled.");
            Console.WriteLine("Press the Enter key to signal the event and exit.");
            Console.ReadLine();
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("Unauthorized access: {0}", ex.Message);
        }
        finally
        {
            ewh.Set();
        }
    }
}
Imports System.Threading
Imports System.Security.AccessControl

Friend Class Example

    <MTAThread> _
    Friend Shared Sub Main()
        Const ewhName As String = "EventWaitHandleExample5"

        Dim ewh As EventWaitHandle = Nothing
        Dim doesNotExist as Boolean = False
        Dim unauthorized As Boolean = False

        ' The value of this variable is set by the event
        ' constructor. It is True if the named system event was
        ' created, and False if the named event already existed.
        '
        Dim wasCreated As Boolean

        ' Attempt to open the named event.
        Try
            ' Open the event with (EventWaitHandleRights.Synchronize
            ' Or EventWaitHandleRights.Modify), to wait on and 
            ' signal the named event.
            '
            ewh = EventWaitHandle.OpenExisting(ewhName)
        Catch ex As WaitHandleCannotBeOpenedException
            Console.WriteLine("Named event does not exist.")
            doesNotExist = True
        Catch ex As UnauthorizedAccessException
            Console.WriteLine("Unauthorized access: {0}", ex.Message)
            unauthorized = True
        End Try

        ' There are three cases: (1) The event does not exist.
        ' (2) The event exists, but the current user doesn't 
        ' have access. (3) The event exists and the user has
        ' access.
        '
        If doesNotExist Then
            ' The event does not exist, so create it.

            ' Create an access control list (ACL) that denies the
            ' current user the right to wait on or signal the 
            ' event, but allows the right to read and change
            ' security information for the event.
            '
            Dim user As String = Environment.UserDomainName _ 
                & "\" & Environment.UserName
            Dim ewhSec As New EventWaitHandleSecurity()

            Dim rule As New EventWaitHandleAccessRule(user, _
                EventWaitHandleRights.Synchronize Or _
                EventWaitHandleRights.Modify, _
                AccessControlType.Deny)
            ewhSec.AddAccessRule(rule)

            rule = New EventWaitHandleAccessRule(user, _
                EventWaitHandleRights.ReadPermissions Or _
                EventWaitHandleRights.ChangePermissions, _
                AccessControlType.Allow)
            ewhSec.AddAccessRule(rule)

            ' Create an EventWaitHandle object that represents
            ' the system event named by the constant 'ewhName', 
            ' initially signaled, with automatic reset, and with
            ' the specified security access. The Boolean value that 
            ' indicates creation of the underlying system object
            ' is placed in wasCreated.
            '
            ewh = New EventWaitHandle(True, _
                EventResetMode.AutoReset, ewhName, _
                wasCreated, ewhSec)

            ' If the named system event was created, it can be
            ' used by the current instance of this program, even 
            ' though the current user is denied access. The current
            ' program owns the event. Otherwise, exit the program.
            ' 
            If wasCreated Then
                Console.WriteLine("Created the named event.")
            Else
                Console.WriteLine("Unable to create the event.")
                Return
            End If

        ElseIf unauthorized Then

            ' Open the event to read and change the access control
            ' security. The access control security defined above
            ' allows the current user to do this.
            '
            Try
                ewh = EventWaitHandle.OpenExisting(ewhName, _
                    EventWaitHandleRights.ReadPermissions Or _
                    EventWaitHandleRights.ChangePermissions)

                ' Get the current ACL. This requires 
                ' EventWaitHandleRights.ReadPermissions.
                Dim ewhSec As EventWaitHandleSecurity = _
                    ewh.GetAccessControl()
                
                Dim user As String = Environment.UserDomainName _ 
                    & "\" & Environment.UserName

                ' First, the rule that denied the current user 
                ' the right to enter and release the event must
                ' be removed.
                Dim rule As New EventWaitHandleAccessRule(user, _
                    EventWaitHandleRights.Synchronize Or _
                    EventWaitHandleRights.Modify, _
                    AccessControlType.Deny)
                ewhSec.RemoveAccessRule(rule)

                ' Now grant the user the correct rights.
                ' 
                rule = New EventWaitHandleAccessRule(user, _
                    EventWaitHandleRights.Synchronize Or _
                    EventWaitHandleRights.Modify, _
                    AccessControlType.Allow)
                ewhSec.AddAccessRule(rule)

                ' Update the ACL. This requires
                ' EventWaitHandleRights.ChangePermissions.
                ewh.SetAccessControl(ewhSec)

                Console.WriteLine("Updated event security.")

                ' Open the event with (EventWaitHandleRights.Synchronize 
                ' Or EventWaitHandleRights.Modify), the rights required
                ' to wait on and signal the event.
                '
                ewh = EventWaitHandle.OpenExisting(ewhName)

            Catch ex As UnauthorizedAccessException
                Console.WriteLine("Unable to change permissions: {0}", _
                    ex.Message)
                Return
            End Try

        End If

        ' Wait on the event, and hold it until the program
        ' exits.
        '
        Try
            Console.WriteLine("Wait on the event.")
            ewh.WaitOne()
            Console.WriteLine("Event was signaled.")
            Console.WriteLine("Press the Enter key to signal the event and exit.")
            Console.ReadLine()
        Catch ex As UnauthorizedAccessException
            Console.WriteLine("Unauthorized access: {0}", _
                ex.Message)
        Finally
            ewh.Set()
        End Try
    End Sub 
End Class

Poznámky

Tento konstruktor slouží k použití zabezpečení řízení přístupu na pojmenovanou systémovou událost při jeho vytvoření, což brání jinému kódu v převzetí kontroly nad událostí.

Tento konstruktor inicializuje EventWaitHandle objekt, který představuje systémovou událost. Můžete vytvořit více EventWaitHandle objektů, které představují stejnou systémovou událost.

Pokud systémová událost neexistuje, vytvoří se se zadaným zabezpečením řízení přístupu. Pokud událost existuje, zadané zabezpečení řízení přístupu se ignoruje.

Note

Volající má plnou kontrolu nad nově vytvořeným EventWaitHandle objektem, i když eventSecurity odmítne nebo neudělí aktuálnímu uživateli přístupová práva. Pokud se ale aktuální uživatel pokusí získat jiný objekt EventWaitHandle představující stejnou pojmenovanou událost pomocí konstruktoru nebo metody OpenExisting, použije se Windows zabezpečení řízení přístupu.

Může name mít předponu Global\ nebo Local\ zadat obor názvů. Global Po zadání oboru názvů lze synchronizační objekt sdílet s libovolnými procesy v systému. Local Pokud je zadán obor názvů, což je také výchozí, pokud není zadán žádný obor názvů, lze synchronizační objekt sdílet s procesy ve stejné relaci. Na Windows je relace relace přihlášení a služby se obvykle spouští v jiné neinteraktivní relaci. V operačních systémech Unix má každé prostředí vlastní relaci. Objekty místní synchronizace relace můžou být vhodné pro synchronizaci mezi procesy se vztahem nadřazenosti nebo podřízenosti, kde se všechny spouští ve stejné relaci. Další informace o názvech synchronizačních objektů v Windows najdete v tématu Názvové objektyobjektu.

name Pokud je zadaný objekt synchronizace požadovaného typu již v oboru názvů existuje, otevře se existující objekt synchronizace. Pokud synchronizační objekt jiného typu již v oboru názvů existuje, WaitHandleCannotBeOpenedException vyvolá se vyvolá. V opačném případě se vytvoří nový synchronizační objekt.

Pokud systémová událost se zadaným názvem parametru name již existuje, initialState parametr se ignoruje. Po volání tohoto konstruktoru použijte hodnotu v proměnné zadané pro parametr ref (ByRef parametr v Visual Basic) createdNew určit, zda pojmenovaná systémová událost již existovala nebo byla vytvořena.

Pokud je počáteční stav události nepodepsaný, vlákna, která čekají na událost, se zablokují. Pokud je počáteční stav signalován a ManualReset příznak je zadán pro mode, vlákna, která čekají na událost, nebudou blokovat. Pokud je počáteční stav signalován a mode je AutoReset, první vlákno, které čeká na událost, bude vydáno okamžitě, po které událost resetuje, a následné vlákna budou blokovat.

Caution

Ve výchozím nastavení není pojmenovaná událost omezena na uživatele, který ji vytvořil. Ostatní uživatelé můžou událost otevřít a používat, včetně narušení události nastavením nebo nevhodným resetováním události. Chcete-li omezit přístup na konkrétní uživatele, můžete EventWaitHandleSecurity předat při vytváření pojmenované události. Vyhněte se používání pojmenovaných událostí bez omezení přístupu v systémech, které můžou mít nedůvěryhodné uživatele se spuštěným kódem.

Viz také

Platí pro

EventWaitHandle(Boolean, EventResetMode, String, NamedWaitHandleOptions, Boolean)

Zdroj:
EventWaitHandle.cs
Zdroj:
EventWaitHandle.cs

Inicializuje novou instanci EventWaitHandle třídy, určuje, zda je obslužná rutina čekání původně signalizována, pokud je vytvořena v důsledku tohoto volání, zda se resetuje automaticky nebo ručně, název události synchronizace systému, možnosti nastavení přístupu k oboru uživatele a relace oboru a logická proměnná, jejíž hodnota po volání označuje, zda pojmenovaná systémová událost byla vytvořena.

public:
 EventWaitHandle(bool initialState, System::Threading::EventResetMode mode, System::String ^ name, System::Threading::NamedWaitHandleOptions options, [Runtime::InteropServices::Out] bool % createdNew);
public EventWaitHandle(bool initialState, System.Threading.EventResetMode mode, string? name, System.Threading.NamedWaitHandleOptions options, out bool createdNew);
new System.Threading.EventWaitHandle : bool * System.Threading.EventResetMode * string * System.Threading.NamedWaitHandleOptions * bool -> System.Threading.EventWaitHandle
Public Sub New (initialState As Boolean, mode As EventResetMode, name As String, options As NamedWaitHandleOptions, ByRef createdNew As Boolean)

Parametry

initialState
Boolean

true nastavit počáteční stav signalizovat, pokud je pojmenovaná událost vytvořena v důsledku tohoto volání; false a nastavte ho na nepřiřazené.

mode
EventResetMode

Jedna z EventResetMode hodnot, která určuje, jestli se událost resetuje automaticky nebo ručně.

name
String

Název, pokud je synchronizační objekt sdílen s jinými procesy; null v opačném případě nebo prázdný řetězec. V názvu se rozlišují malá a velká písmena.

options
NamedWaitHandleOptions

Možnosti oboru pro pojmenovaný popisovač. Ve výchozím nastavení je přístup omezený pouze na aktuálního uživatele a aktuální relaci. Zadané možnosti mohou ovlivnit obor názvů názvu a přístupu k podkladovému objektu popisovače.

createdNew
Boolean

Pokud tato metoda vrátí, obsahuje true , zda byla vytvořena místní událost (to znamená, je-li namenull nebo prázdný řetězec) nebo pokud zadaná pojmenovaná systémová událost byla vytvořena; obsahuje false , pokud zadaná pojmenovaná systémová událost již existovala. Tento parametr se předává neinicializovaný.

Výjimky

name je neplatný. Může to být z různých důvodů, včetně některých omezení, která může operační systém umístit, například neznámé předpony nebo neplatné znaky. Všimněte si, že název a běžné předpony "Global\" a "Local\" rozlišují malá a velká písmena.

nebo

Došlo k nějaké jiné chybě. Vlastnost HResult může poskytnout další informace.

pouze Windows: name zadal neznámý obor názvů. Další informace najdete v tématu Názvy objektů .

name je příliš dlouhý. Omezení délky můžou záviset na operačním systému nebo konfiguraci.

Pojmenovaná událost existuje a má zabezpečení řízení přístupu, ale uživatel nemá FullControl.

Synchronizační objekt se zadaným objektem name nelze vytvořit. Synchronizační objekt jiného typu může mít stejný název.

nebo

Objekt se zadaným name objektem existuje, ale zadaný options objekt není kompatibilní s možnostmi existujícího objektu.

Hodnota mode výčtu byla mimo právní rozsah.

Poznámky

name Pokud je zadaný objekt synchronizace požadovaného typu již v oboru názvů existuje, otevře se existující objekt synchronizace. Pokud options však určuje přístup omezený na aktuálního uživatele a synchronizační objekt není kompatibilní s ním, WaitHandleCannotBeOpenedException vyvolá se vyvolá. Pokud synchronizační objekt jiného typu již v oboru názvů existuje, WaitHandleCannotBeOpenedException vyvolá se i objekt synchronizace. V opačném případě se vytvoří nový synchronizační objekt.

Pokud systémová událost se zadaným názvem parametru name již existuje, initialState parametr se ignoruje. Po volání tohoto konstruktoru použijte hodnotu v proměnné zadané pro parametr ref (ByRef parametr v Visual Basic) createdNew určit, zda pojmenovaná systémová událost již existovala nebo byla vytvořena.

Pokud je počáteční stav události nepodepsaný, vlákna, která čekají na událost, se zablokují. Pokud je počáteční stav signalován a ManualReset příznak je zadán pro mode, vlákna, která čekají na událost, nebudou blokovat. Pokud je počáteční stav signalován a mode je AutoReset, první vlákno, které čeká na událost, bude vydáno okamžitě, po které událost resetuje, a následné vlákna budou blokovat.

V Windows je možné zadat options a určit, zda je pojmenovaná systémová událost přístupná pouze aktuálnímu uživateli nebo všem uživatelům. Umožňuje také určit, jestli je pojmenovaná systémová událost přístupná pouze pro procesy v aktuální relaci nebo pro všechny relace. Další informace najdete na webu NamedWaitHandleOptions.

Caution

V operačních systémech se systémem options Unix nemá parametr žádný vliv, protože pojmenované systémové události nejsou podporovány.

Viz také

Platí pro