Запутаться насчет названия EventWaitHandle

Учитывая приведенный ниже фрагмент кода для стороны MyServer

public void CreateEvent()
{
   var serverReadyEvent = new EventWaitHandle(false, EventResetMode.AutoReset, "aaa");
}

После поиска из MSDN, 3-й параметр ctor означает

название

Тип: System.String

Имя общесистемного события синхронизации.

Но я обнаружил, что могу вызывать метод CreateEvent несколько раз и без каких-либо исключений. Значит ли это, что существует несколько экземпляров EventWaitHandle с одинаковыми именами? Это правильное поведение?

А ниже приведен фрагмент кода на стороне MyClient

public void OpenEvent()
{
     EventWaitHandle.OpenExisting("aaa");
}

Если CreateEvent вызывался на стороне MyServer 2 раза, то на стороне MyClient какое событие будет открыто после вызова OpenEvent?

1 ответ

Решение

Посмотрите документацию дляCreateEvent(),

Документация для lpName Состояния параметров:

Если lpName совпадает с именем существующего именованного объекта события, эта функция запрашивает право доступа EVENT_ALL_ACCESS. В этом случае параметры bManualReset и bInitialState игнорируются, поскольку они уже были установлены процессом создания.

Таким образом, вы можете видеть, что если событие уже существует, будет возвращен дескриптор существующего.

Поэтому существует только одно событие, и ответ на ваш вопрос о том, какой из них открыт, является "единственным и единственным событием, которое было создано".

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