在.Net中安全地调用事件的简明方法

时间:2011-04-21 18:58:09

标签: c# events

是否有一种简洁的方法可以安全地调用C#.Net中的事件。我想安全地处理没有订阅者和订阅者可能抛出的例外......

我想在Delegate上使用TryInvoke方法。也可以在那里传递异常处理程序。我在.Net 3.5,所以没有扩展方法...

无论如何这里是我通常使用的样板。

    void fireListChanged(List<string> paths)
    {             
        try
        {
            if (ListChanged != null)
            {
                ListChanged(paths);
            }
        }
        catch (System.Exception ex)
        {
            m_output.write(ex);
        }
    }

    public event ListStringChangedDlgt ListChanged;

1 个答案:

答案 0 :(得分:3)

只需使用= delegate {}模式即可。与您的解决方案相比,奖金是线程安全的。

void fireListChanged(List<string> paths)
{             
    try
    {
            ListChanged(paths);
    }
    catch (System.Exception ex)
    {
        m_output.write(ex);
    }
}

public event ListStringChangedDlgt ListChanged = delegate {};

我还建议您使用EventHandlerEventHandler<YourEventArgClass>作为活动的代表。