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

时间:2012-04-22 06:27:22

标签: c# .net events design-patterns

我发现自己经常需要以下代码方案

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

还有更好的方法:

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

等待我的代表完成其工作的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

您可能需要考虑查看AutoResetEvent类以等待代理完成其工作,而不是在while循环中旋转。这样可以避免在等待代表完成时旋转。

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;
    }
}

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