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