Можно ли проверить, можно ли открыть System.Threading.EventWaitHandle без исключения? - PullRequest
2 голосов
/ 30 марта 2012

У меня есть

try
{
    using (var eventWaitHandle = EventWaitHandle.OpenExisting(name))
    {
        eventWaitHandle.Set();
    }

    Environment.Exit(0);
}
catch(WaitHandleCannotBeOpenedException)
{
    // register new handle code goes here
}

Есть ли способ сделать это без исключения / обработки исключений?

1 Ответ

5 голосов
/ 30 марта 2012

Начиная с .NET 4.5 вы можете исключить исключение WaitHandleCannotBeOpenedException для случая, когда именованного системного события не существует, с помощью метода TryOpenExisting():

EventWaitHandle result = null;
if (!EventWaitHandle.TryOpenExisting("eventName", out result))
{
   if (result == null)
   {
      // event was not found
   }else
   {
      // result represent a cross process WaitEvent handle
   }
}

public static bool TryOpenExisting(
                      string name,
                      out EventWaitHandle result
)

MSDN :

Если вы не уверены, существует ли указанное событие синхронизации, используйте перегрузка этого метода вместо перегрузки метода OpenExisting, который выдает исключение, если событие синхронизации не существует

...