是否可以检查是否可以打开System.Threading.EventWaitHandle而不抛出异常?

Jad*_*ias 2 .net c# concurrency ipc event-wait-handle

我有

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

    Environment.Exit(0);
}
catch(WaitHandleCannotBeOpenedException)
{
    // register new handle code goes here
}
Run Code Online (Sandbox Code Playgroud)

没有抛出/处理异常,有没有办法做到这一点?

sll*_*sll 5

由于使用方法不存在命名系统事件时.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
   }
}
Run Code Online (Sandbox Code Playgroud)
public static bool TryOpenExisting(
                      string name,
                      out EventWaitHandle result
)
Run Code Online (Sandbox Code Playgroud)

MSDN:

如果您不确定是否存在命名同步事件,请使用此方法重载而不是OpenExisting方法重载,如果同步事件不存在则会引发异常