Можно ли проверить, можно ли открыть System.Threading.EventWaitHandle без исключения?

Я имею

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

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

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

1 ответ

Решение

Поскольку .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, которая выдает исключение, если событие синхронизации не существует

Другие вопросы по тегам