Multithreading 为什么AutoResetEvent和ManualResetEvent在构造函数中不支持名称?
在.NET Framework 2.0上,AutoResetEvent和ManualResetEvent继承自EventWaitHandle。EventWaitHandle类有4个不同的构造函数。3个构造函数支持为事件命名。另一方面,ManualResetEvent和AutoResetEvent都不支持命名,并提供一个接收initialState的构造函数。我可以简单地从EventWaitHandle继承并编写支持所有构造函数重载的类的我自己的实现,但是如果不需要的话,我不想重新发明轮子。我的问题是: 命名事件是否有特殊问题? 你知道微软为什么不支持它吗? 您是否有比从EventWaitHandle类继承并调用以下示例中的相应构造函数更好的方案?Multithreading 为什么AutoResetEvent和ManualResetEvent在构造函数中不支持名称?,multithreading,.net-2.0,synchronization,Multithreading,.net 2.0,Synchronization,在.NET Framework 2.0上,AutoResetEvent和ManualResetEvent继承自EventWaitHandle。EventWaitHandle类有4个不同的构造函数。3个构造函数支持为事件命名。另一方面,ManualResetEvent和AutoResetEvent都不支持命名,并提供一个接收initialState的构造函数。我可以简单地从EventWaitHandle继承并编写支持所有构造函数重载的类的我自己的实现,但是如果不需要的话,我不想重新发明轮子。我的问
您可以创建命名的手动重置事件,如下所示:
// Open the event by name.
EventWaitHandle namedMRSE =
new EventWaitHandle(false, EventResetMode.ManualReset, @"TheName");
对于上述代码。我不知道设计背后的具体原因,但在msdn上,这表明存在基于应用领域和流程的区别:
事件等待句柄在许多情况下都很有用
相同的同步场景
作为班长。事件等待
手柄通常比其他手柄更容易使用
System.Threading.Monitor.Wait和
System.Threading.Monitor.PulseSystem.Object
方法,它们提供了更多的控制
过信号。命名事件等待
句柄也可用于
跨服务器同步活动
应用领域和流程,
而监视器是本地的
应用程序域
您的解决方案与我的解决方案类似。我从派生类构造函数调用EventWaitHandle,您可以直接使用它。@lkaso我认为它比创建派生类更直接一些。。。不幸的是,对于设计选择的原因,我没有太多可以提供的。
// Open the event by name.
EventWaitHandle namedMRSE =
new EventWaitHandle(false, EventResetMode.ManualReset, @"TheName");