Ika*_*aso 2 multithreading synchronization .net-2.0
在.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)
{
}
}
你可以像这样制作一个命名的手动重置事件:
// Open the event by name.
EventWaitHandle namedMRSE =
new EventWaitHandle(false, EventResetMode.ManualReset, @"TheName");
Run Code Online (Sandbox Code Playgroud)
以下是上述代码的参考.我不知道设计背后的特殊原因,但有一些关于msdn的注释表明存在基于应用程序域和过程的区别:
事件等待句柄在许多与Monitor类相同的同步方案中很有用.事件等待句柄通常比System.Threading.Monitor.Wait和System.Threading.Monitor.Pulse(System.Object)方法更容易使用,它们提供了对信令的更多控制.命名事件等待句柄还可用于跨应用程序域和进程同步活动,而监视器是应用程序域的本地.