在.NET Framework 2.0上,AutoResetEvent和ManualResetEvent继承自EventWaitHandle。 EventWaitHandle类有4个不同的构造函数。 3个构造函数支持为事件命名。另一方面,ManualResetEvent和AutoResetEvent都不支持命名并提供接收initialState的单个构造函数。我可以简单地从EventWaitHandle继承并编写我自己的那些支持所有构造函数重载的类的实现,但我不喜欢重新发明轮子,如果我不需要。我的问题是:
public class MyAutoResetEvent: EventWaitHandle { public MyAutoResetEvent(bool initialState) : base(initialState, EventResetMode.AutoReset) { } public MyAutoResetEvent(bool initialState, string name) : base(initialState, EventResetMode.AutoReset, name) { } public MyAutoResetEvent(bool initialState, string name, out bool createdNew) : base(initialState, EventResetMode.AutoReset, name, out createdNew) { } public MyAutoResetEvent(bool initialState, string name, out bool createdNew, EventWaitHandleSecurity eventSecurity) : base(initialState, EventResetMode.AutoReset, string.Empty, out createdNew, eventSecurity) { } }
答案 0 :(得分:5)
你可以这样命名一个手动重置事件:
// Open the event by name.
EventWaitHandle namedMRSE =
new EventWaitHandle(false, EventResetMode.ManualReset, @"TheName");
Here is the reference以上代码。我不知道设计背后的特殊原因,但msdn上的there are some notes表明存在基于应用程序域和过程的区别:
事件等待句柄在许多方面很有用 相同的同步方案 作为Monitor类。事件等待 手柄通常比使用更容易 System.Threading.Monitor.Wait和 System.Threading.Monitor.Pulse(System.Object的) 方法,他们提供更多的控制 过度信号。命名事件等待 句柄也可以用来 同步跨越的活动 应用领域和流程, 而监视器是本地的 应用领域。