混淆EventWaitHandle的名称

时间:2014-09-17 09:48:28

标签: c# .net api event-wait-handle

考虑下面的MyServer端代码片段

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

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

  

名称

     

输入:System.String

     

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

但我发现我可以多次调用方法 CreateEvent 而没有任何异常,这是否意味着存在多个具有相同名称的EventWaitHandle实例?这是正确的行为吗?

以下是MyClient端的代码片段

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

如果在MyServer端调用 CreateEvent 2次,那么在MyClient端调用 OpenEvent 后将打开哪个事件?

1 个答案:

答案 0 :(得分:4)

请看the documentation for CreateEvent()

lpName参数的文档说明:

  

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

所以你可以看到,如果事件已经存在,将返回现有事件的句柄。

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