如何避免多次注册事件

时间:2014-10-08 12:50:16

标签: c# .net

我有一个事件,我注册事件处理程序。

event Action OnGameList;

然后例如我达到了这样的代码:

backend.OnGameList += ProcessGameList;
backend.GetGameList(); //this will trigger the above event.

每次我到达此代码时,处理程序都是ADDED。这意味着它将第二次被调用两次。 当然我可以在这样的函数中删除它:

backend.OnGameList -= ProcessGameList;

但我觉得这种问题有更好的解决方案。

2 个答案:

答案 0 :(得分:3)

我认为您应该使用某种支持字段来跟踪您已订阅的内容。即。

    private bool _subscribed = false;

    SubscribeToOnGameListEvent();
    backend.GetGameList();

    private void SubscribeToOnGameListEvent()
    {
        if (!_subscribed)
        {
            backend.OnGameList += ProcessGameList;
            _subscribed = true;
        }
    }

答案 1 :(得分:3)

您可以检查调用列表中是否存在特定委托:

class Foo
{
    private EventHandler bar;

    public event EventHandler Bar
    {
        add
        {
            if (bar == null)
            {
                bar = value;
            }
            else
            {
                if (!bar.GetInvocationList().Contains(value))
                {
                    bar += value;
                }
            }
        }
        remove
        {
            // ...
        }
    }

    public void RaiseBar()
    {
        if (bar != null)
        {
            bar(this, EventArgs.Empty);
        }
    }
}
相关问题