我有一个事件,我注册事件处理程序。
event Action OnGameList;
然后例如我达到了这样的代码:
backend.OnGameList += ProcessGameList;
backend.GetGameList(); //this will trigger the above event.
每次我到达此代码时,处理程序都是ADDED。这意味着它将第二次被调用两次。 当然我可以在这样的函数中删除它:
backend.OnGameList -= ProcessGameList;
但我觉得这种问题有更好的解决方案。
答案 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);
}
}
}