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