对EventWaitHandle的名称感到困惑

本文关键字:EventWaitHandle | 更新日期: 2023-09-27 18:22:14

考虑以下MyServer端的代码片段

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

从MSDN中搜索后,ctor的第三个参数表示

名称

类型:System.String

系统范围同步事件的名称。

但我发现我可以多次调用方法CreateEvent,无一例外,这是否意味着存在多个同名的EventWaitHandle实例?这是正确的行为吗?

下面是MyClient端的代码片段

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

如果CreateEvent在MyServer端被调用了两次,那么在MyClient端,调用OpenEvent

对EventWaitHandle的名称感到困惑

查看CreateEvent()的文档。

lpName参数状态的文档:

如果lpName与现有命名事件对象的名称匹配,则函数请求EVENT_ALL_ACCESS访问权限。在这种情况下bManualReset和bInitialState参数被忽略,因为它们已由创建过程设置。

因此,您可以看到,如果事件已经存在,则将返回现有事件的句柄。

因此,只有一个事件存在,关于打开哪个事件的问题的答案是"创建的唯一事件"。