gpt4 book ai didi

multithreading - 为什么 AutoResetEvent 和 ManualResetEvent 不支持在构造函数中命名?

转载 作者:行者123 更新时间:2023-12-03 12:50:53 24 4
gpt4 key购买 nike

在 .NET Framework 2.0 上,AutoResetEvent 和 ManualResetEvent 继承自 EventWaitHandle。 EventWaitHandle 类有 4 个不同的构造函数。 3 个构造函数支持为事件命名。另一方面,ManualResetEvent 和 AutoResetEvent 都不支持命名并提供一个接收初始状态的构造函数。我可以简单地从 EventWaitHandle 继承并编写我自己的那些支持所有构造函数重载的类的实现,但如果我不需要的话,我不喜欢重新发明轮子。我的问题是:

  • 命名事件有什么特殊问题吗?
  • 你知道微软为什么不支持它吗?
  • 您是否有比从 EventWaitHandle 类继承并调用适当的构造函数(如下例所示)更好的建议?

  • 公共(public)类 MyAutoResetEvent:EventWaitHandle
    {
    公共(public) MyAutoResetEvent( bool 初始状态)
    :基础(初始状态,EventResetMode.AutoReset)
    {
    }
    公共(public) MyAutoResetEvent( bool 初始状态,字符串名称)
    :基础(初始状态,EventResetMode.AutoReset,名称)
    {
    }
    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)
    :基础(initialState,EventResetMode.AutoReset,string.Empty,out createdNew,eventSecurity)
    {
    }
    }

    最佳答案

    您可以像这样进行命名手动重置事件:

    // Open the event by name.
    EventWaitHandle namedMRSE =
    new EventWaitHandle(false, EventResetMode.ManualReset, @"TheName");

    Here is the reference对于上面的代码。我不知道设计背后的具体原因,但是 there are some notes在 msdn 上,这表明存在基于应用程序域和进程的区别:

    Event wait handles are useful in many of the same synchronization scenarios as the Monitor class. Event wait handles are often easier to use than the System.Threading.Monitor.Wait and System.Threading.Monitor.Pulse(System.Object) methods, and they offer more control over signaling. Named event wait handles can also be used to synchronize activities across application domains and processes, whereas monitors are local to an application domain.

    关于multithreading - 为什么 AutoResetEvent 和 ManualResetEvent 不支持在构造函数中命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2816759/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com