考虑以下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
查看CreateEvent()
的文档。
lpName
参数状态的文档:
如果lpName与现有命名事件对象的名称匹配,则函数请求EVENT_ALL_ACCESS访问权限。在这种情况下bManualReset和bInitialState参数被忽略,因为它们已由创建过程设置。
因此,您可以看到,如果事件已经存在,则将返回现有事件的句柄。
因此,只有一个事件存在,关于打开哪个事件的问题的答案是"创建的唯一事件"。