EventWaitHandle.OpenExisting Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Apre un evento di sincronizzazione denominato specificato, se esiste già.
Overload
| Nome | Descrizione |
|---|---|
| OpenExisting(String) |
Apre l'evento di sincronizzazione denominato specificato, se esiste già. |
| OpenExisting(String, EventWaitHandleRights) |
Apre l'evento di sincronizzazione denominato specificato, se già esistente, con l'accesso di sicurezza desiderato. |
| OpenExisting(String, NamedWaitHandleOptions) |
Apre l'evento di sincronizzazione denominato specificato, se esiste già. Se le opzioni sono impostate solo sull'utente corrente, i controlli di accesso dell'oggetto vengono verificati per l'utente chiamante. |
OpenExisting(String)
- Origine:
- EventWaitHandle.cs
- Origine:
- EventWaitHandle.cs
- Origine:
- EventWaitHandle.cs
- Origine:
- EventWaitHandle.cs
- Origine:
- EventWaitHandle.cs
Apre l'evento di sincronizzazione denominato specificato, se esiste già.
public:
static System::Threading::EventWaitHandle ^ OpenExisting(System::String ^ name);
[System.Security.SecurityCritical]
public static System.Threading.EventWaitHandle OpenExisting(string name);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static System.Threading.EventWaitHandle OpenExisting(string name);
public static System.Threading.EventWaitHandle OpenExisting(string name);
[<System.Security.SecurityCritical>]
static member OpenExisting : string -> System.Threading.EventWaitHandle
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member OpenExisting : string -> System.Threading.EventWaitHandle
static member OpenExisting : string -> System.Threading.EventWaitHandle
Public Shared Function OpenExisting (name As String) As EventWaitHandle
Parametri
- name
- String
Nome dell'oggetto di sincronizzazione da aprire e condividere con altri processi. Il nome fa distinzione tra maiuscole e minuscole. Il carattere barra rovesciata (\) è riservato e può essere usato solo per specificare uno spazio dei nomi. Per altre informazioni sugli spazi dei nomi, vedere la sezione osservazioni. Potrebbero esserci ulteriori restrizioni sul nome a seconda del sistema operativo. Ad esempio, nei sistemi operativi basati su Unix, il nome dopo l'esclusione dello spazio dei nomi deve essere un nome di file valido.
Valori restituiti
Oggetto che rappresenta l'evento di sistema denominato.
- Attributi
Eccezioni
Impossibile aprire un oggetto di sincronizzazione con l'oggetto specificato name . Potrebbe non esistere o un oggetto di sincronizzazione di un tipo diverso potrebbe avere lo stesso nome. In alcuni casi, questa eccezione potrebbe essere generata per nomi non validi.
name è una stringa vuota.
oppure
solo .NET Framework: name è più lungo di MAX_PATH (260 caratteri).
name è null.
name non è valido. Questo può essere per vari motivi, incluse alcune restrizioni che potrebbero essere inserite dal sistema operativo, ad esempio un prefisso sconosciuto o caratteri non validi. Si noti che il nome e i prefissi comuni "Global\" e "Local\" fanno distinzione tra maiuscole e minuscole.
oppure
Si è verificato un altro errore. La HResult proprietà potrebbe fornire altre informazioni.
solo Windows: name specificato uno spazio dei nomi sconosciuto. Per altre informazioni, vedere Nomi di oggetti .
name supera la lunghezza consentita. Le restrizioni relative alla lunghezza possono dipendere dal sistema operativo o dalla configurazione.
L'evento denominato esiste, ma l'utente non dispone dell'accesso di sicurezza necessario per usarlo.
Commenti
Può name essere preceduto Global\ da o Local\ per specificare uno spazio dei nomi. Quando si specifica lo Global spazio dei nomi, l'oggetto di sincronizzazione può essere condiviso con qualsiasi processo nel sistema. Quando si specifica lo Local spazio dei nomi , che è anche l'impostazione predefinita quando non viene specificato alcuno spazio dei nomi, l'oggetto di sincronizzazione può essere condiviso con i processi nella stessa sessione. In Windows una sessione è una sessione di accesso e i servizi vengono in genere eseguiti in una sessione non interattiva diversa. Nei sistemi operativi simili a Unix, ogni shell ha una propria sessione. Gli oggetti di sincronizzazione locale della sessione possono essere appropriati per la sincronizzazione tra processi con una relazione padre/figlio in cui vengono eseguiti tutti nella stessa sessione. Per altre informazioni sui nomi degli oggetti di sincronizzazione in Windows, vedere Nomina oggetto.
Se esiste un oggetto di sincronizzazione del tipo richiesto nello spazio dei nomi , viene aperto l'oggetto di sincronizzazione esistente. Se non esiste un oggetto di sincronizzazione nello spazio dei nomi o un oggetto di sincronizzazione di un tipo diverso esiste nello spazio dei nomi , viene generato un oggetto WaitHandleCannotBeOpenedException .
Il OpenExisting metodo tenta di aprire l'evento di sistema denominato specificato. Per creare l'evento di sistema quando non esiste già, usare uno dei EventWaitHandle costruttori con un name parametro .
Più chiamate a questo metodo che utilizzano lo stesso valore per name non restituiscono necessariamente lo stesso EventWaitHandle oggetto, anche se gli oggetti restituiti rappresentano lo stesso evento di sistema denominato.
In .NET Framework questo overload del metodo equivale a chiamare il metodo System.Threading.EventWaitHandle.OpenExisting(System.String,System.Security.AccessControl.EventWaitHandleRights) e specificando EventWaitHandleRights.Synchronize e EventWaitHandleRights.Modify rights, combinato usando l'operazione bit per bit OR.
Se si specifica il EventWaitHandleRights.Synchronize flag, un thread può attendere l'evento di sistema denominato e specificare il EventWaitHandleRights.Modify flag consente a un thread di chiamare i Set metodi e Reset .
Vedi anche
Si applica a
OpenExisting(String, EventWaitHandleRights)
Apre l'evento di sincronizzazione denominato specificato, se già esistente, con l'accesso di sicurezza desiderato.
public:
static System::Threading::EventWaitHandle ^ OpenExisting(System::String ^ name, System::Security::AccessControl::EventWaitHandleRights rights);
public static System.Threading.EventWaitHandle OpenExisting(string name, System.Security.AccessControl.EventWaitHandleRights rights);
[System.Security.SecurityCritical]
public static System.Threading.EventWaitHandle OpenExisting(string name, System.Security.AccessControl.EventWaitHandleRights rights);
static member OpenExisting : string * System.Security.AccessControl.EventWaitHandleRights -> System.Threading.EventWaitHandle
[<System.Security.SecurityCritical>]
static member OpenExisting : string * System.Security.AccessControl.EventWaitHandleRights -> System.Threading.EventWaitHandle
Public Shared Function OpenExisting (name As String, rights As EventWaitHandleRights) As EventWaitHandle
Parametri
- name
- String
Nome dell'oggetto di sincronizzazione da aprire e condividere con altri processi. Il nome fa distinzione tra maiuscole e minuscole. Il carattere barra rovesciata (\) è riservato e può essere usato solo per specificare uno spazio dei nomi. Per altre informazioni sugli spazi dei nomi, vedere la sezione osservazioni. Potrebbero esserci ulteriori restrizioni sul nome a seconda del sistema operativo. Ad esempio, nei sistemi operativi basati su Unix, il nome dopo l'esclusione dello spazio dei nomi deve essere un nome di file valido.
- rights
- EventWaitHandleRights
Combinazione bit per bit dei valori di enumerazione che rappresentano l'accesso alla sicurezza desiderato.
Valori restituiti
Oggetto che rappresenta l'evento di sistema denominato.
- Attributi
Eccezioni
name è una stringa vuota.
oppure
solo .NET Framework: name è più lungo di MAX_PATH (260 caratteri).
name è null.
Impossibile aprire un oggetto di sincronizzazione con l'oggetto specificato name . Potrebbe non esistere o un oggetto di sincronizzazione di un tipo diverso potrebbe avere lo stesso nome. In alcuni casi, questa eccezione potrebbe essere generata per nomi non validi.
name non è valido. Questo può essere per vari motivi, incluse alcune restrizioni che potrebbero essere inserite dal sistema operativo, ad esempio un prefisso sconosciuto o caratteri non validi. Si noti che il nome e i prefissi comuni "Global\" e "Local\" fanno distinzione tra maiuscole e minuscole.
oppure
Si è verificato un altro errore. La HResult proprietà potrebbe fornire altre informazioni.
solo Windows: name specificato uno spazio dei nomi sconosciuto. Per altre informazioni, vedere Nomi di oggetti .
name supera la lunghezza consentita. Le restrizioni relative alla lunghezza possono dipendere dal sistema operativo o dalla configurazione.
L'evento denominato esiste, ma l'utente non dispone dell'accesso di sicurezza desiderato.
Esempio
Nell'esempio di codice seguente viene illustrato il comportamento tra processi di un evento di sistema denominato con sicurezza del controllo di accesso. Nell'esempio viene utilizzato l'overload del OpenExisting(String) metodo per verificare l'esistenza di un evento denominato.
Se l'evento non esiste, viene creato con la proprietà iniziale e la sicurezza del controllo di accesso che nega all'utente corrente il diritto di usare l'evento, ma concede il diritto di leggere e modificare le autorizzazioni per l'evento.
Se si esegue l'esempio compilato da due finestre di comando, la seconda copia genererà un'eccezione di violazione di accesso nella chiamata a OpenExisting(String). L'eccezione viene intercettata e l'esempio usa l'overload del OpenExisting(String, EventWaitHandleRights) metodo per attendere l'evento con i diritti necessari per leggere e modificare le autorizzazioni.
Dopo aver modificato le autorizzazioni, l'evento viene aperto con i diritti necessari per attenderlo e segnalarlo. Se si esegue l'esempio compilato da una terza finestra di comando, l'esempio viene eseguito usando le nuove autorizzazioni.
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
Commenti
Può name essere preceduto Global\ da o Local\ per specificare uno spazio dei nomi. Quando si specifica lo Global spazio dei nomi, l'oggetto di sincronizzazione può essere condiviso con qualsiasi processo nel sistema. Quando si specifica lo Local spazio dei nomi , che è anche l'impostazione predefinita quando non viene specificato alcuno spazio dei nomi, l'oggetto di sincronizzazione può essere condiviso con i processi nella stessa sessione. In Windows una sessione è una sessione di accesso e i servizi vengono in genere eseguiti in una sessione non interattiva diversa. Nei sistemi operativi simili a Unix, ogni shell ha una propria sessione. Gli oggetti di sincronizzazione locale della sessione possono essere appropriati per la sincronizzazione tra processi con una relazione padre/figlio in cui vengono eseguiti tutti nella stessa sessione. Per altre informazioni sui nomi degli oggetti di sincronizzazione in Windows, vedere Nomina oggetto.
Se esiste un oggetto di sincronizzazione del tipo richiesto nello spazio dei nomi , viene aperto l'oggetto di sincronizzazione esistente. Se non esiste un oggetto di sincronizzazione nello spazio dei nomi o un oggetto di sincronizzazione di un tipo diverso esiste nello spazio dei nomi , viene generato un oggetto WaitHandleCannotBeOpenedException .
Il rights parametro deve includere il EventWaitHandleRights.Synchronize flag per consentire ai thread di attendere l'evento e il EventWaitHandleRights.Modify flag per consentire ai thread di chiamare i Set metodi e Reset .
Il OpenExisting metodo tenta di aprire un evento di sistema denominato esistente. Per creare l'evento di sistema quando non esiste già, usare uno dei EventWaitHandle costruttori con un name parametro .
Più chiamate a questo metodo che utilizzano lo stesso valore per name non restituiscono necessariamente lo stesso EventWaitHandle oggetto, anche se gli oggetti restituiti rappresentano lo stesso evento di sistema denominato.
Vedi anche
Si applica a
OpenExisting(String, NamedWaitHandleOptions)
- Origine:
- EventWaitHandle.cs
- Origine:
- EventWaitHandle.cs
Apre l'evento di sincronizzazione denominato specificato, se esiste già. Se le opzioni sono impostate solo sull'utente corrente, i controlli di accesso dell'oggetto vengono verificati per l'utente chiamante.
public:
static System::Threading::EventWaitHandle ^ OpenExisting(System::String ^ name, System::Threading::NamedWaitHandleOptions options);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static System.Threading.EventWaitHandle OpenExisting(string name, System.Threading.NamedWaitHandleOptions options);
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member OpenExisting : string * System.Threading.NamedWaitHandleOptions -> System.Threading.EventWaitHandle
Public Shared Function OpenExisting (name As String, options As NamedWaitHandleOptions) As EventWaitHandle
Parametri
- name
- String
Nome dell'oggetto di sincronizzazione da aprire e condividere con altri processi. Il nome fa distinzione tra maiuscole e minuscole.
- options
- NamedWaitHandleOptions
Opzioni di ambito per l'handle denominato. Per impostazione predefinita, l'accesso è limitato solo all'utente corrente e alla sessione corrente. Le opzioni specificate potrebbero influire sullo spazio dei nomi per il nome e l'accesso all'oggetto handle sottostante.
Valori restituiti
Oggetto che rappresenta l'evento di sistema denominato.
- Attributi
Eccezioni
Impossibile aprire un oggetto di sincronizzazione con l'oggetto specificato name . Potrebbe non esistere o un oggetto di sincronizzazione di un tipo diverso potrebbe avere lo stesso nome. In alcuni casi, questa eccezione potrebbe essere generata per nomi non validi.
oppure
Esiste un oggetto con l'oggetto specificato, ma l'oggetto specificato nameoptions non è compatibile con le opzioni dell'oggetto esistente.
name è una stringa vuota.
name è null.
name non è valido. Questo può essere per vari motivi, incluse alcune restrizioni che potrebbero essere inserite dal sistema operativo, ad esempio un prefisso sconosciuto o caratteri non validi. Si noti che il nome e i prefissi comuni "Global\" e "Local\" fanno distinzione tra maiuscole e minuscole.
oppure
Si è verificato un altro errore. La HResult proprietà potrebbe fornire altre informazioni.
solo Windows: name specificato uno spazio dei nomi sconosciuto. Per altre informazioni, vedere Nomi di oggetti .
name supera la lunghezza consentita. Le restrizioni relative alla lunghezza possono dipendere dal sistema operativo o dalla configurazione.
L'evento denominato esiste, ma l'utente non dispone dell'accesso di sicurezza necessario per usarlo.
Commenti
Se esiste un oggetto di sincronizzazione del tipo richiesto nello spazio dei nomi , viene aperto l'oggetto di sincronizzazione esistente. Tuttavia, se options specifica l'accesso limitato all'utente corrente e l'oggetto di sincronizzazione non è compatibile con esso, viene generata un'eccezione WaitHandleCannotBeOpenedException . Se non esiste un oggetto di sincronizzazione nello spazio dei nomi o un oggetto di sincronizzazione di un tipo diverso esiste nello spazio dei nomi , viene generata anche un'eccezione WaitHandleCannotBeOpenedException .
Il OpenExisting metodo tenta di aprire l'evento di sistema denominato specificato. Per creare l'evento di sistema quando non esiste già, usare uno dei EventWaitHandle costruttori con un name parametro .
Più chiamate a questo metodo che utilizzano lo stesso valore per name non restituiscono necessariamente lo stesso EventWaitHandle oggetto, anche se gli oggetti restituiti rappresentano lo stesso evento di sistema denominato.