2

我有

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

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

有没有办法在不抛出/处理异常的情况下做到这一点?

4

1 回答 1

6

由于.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 方法重载,如果同步事件不存在则抛出异常

于 2012-03-30T13:19:51.207 回答