2

考虑以下 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后会打开哪个事件?

4

1 回答 1

4

查看. _CreateEvent()

lpName参数的文档指出:

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

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

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

于 2014-09-17T09:52:53.360 回答