单个使用事件的模式或语言工具

本文关键字:语言 工具 模式 事件 单个使 | 更新日期: 2023-09-27 18:31:57

我发现自己经常需要以下代码场景

订阅事件 ->等待事件 ->取消订阅事件。

有没有比以下更好的方法:

myEvent += mydelegate;
while (mydelegatewasn't called)
{
     // do stuff
}   
myEvent -= mydelegate;

另外,等待我的代理人完成其工作的最佳方式是什么?

单个使用事件的模式或语言工具

与其在 while 循环中旋转,不如考虑查看 AutoResetEvent 类以等待委托完成其工作。这样可以避免在等待委托完成时旋转。

void Main()
{
    RunActionOnceOnEvent(delegate()
    {
        // do stuff
    });
}
void RunActionOnceOnEvent(Action action)
{
    AutoResetEvent autoResetEvent = new AutoResetEvent(false);
    EventDelegate handler = delegate() 
    { 
        autoResetEvent.Set(); 
    }); 
    myEvent += handler;
    try
    {
        autoResetEvent.WaitOne();
        action();
    }
    finally 
    {
        myEvent -= handler;
    }
}

在减少不同事件的样板代码数量方面,我不确定你能做很多事情,因为事件不是一流的。