Запутаться насчет названия 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 игнорируются, поскольку они уже были установлены процессом создания.
Таким образом, вы можете видеть, что если событие уже существует, будет возвращен дескриптор существующего.
Поэтому существует только одно событие, и ответ на ваш вопрос о том, какой из них открыт, является "единственным и единственным событием, которое было создано".