У меня есть событие, в котором я регистрирую обработчики событий.
event Action OnGameList;
то, например, я получаю такой код:
backend.OnGameList += ProcessGameList;
backend.GetGameList(); //this will trigger the above event.
каждый раз, когда я достигаю этого кода, обработчик добавляется. это означает, что во второй раз он будет называться дважды. конечно, я мог бы удалить его в такой функции:
backend.OnGameList -= ProcessGameList;
но я чувствую, что есть лучшее решение для такого рода проблем.
Вы можете проверить наличие определенного делегата в списке вызовов:
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);
}
}
}
Я думаю, вы должны использовать какое-то фоновое поле для отслеживания того, что вы уже подписаны. Т.е.
private bool _subscribed = false;
SubscribeToOnGameListEvent();
backend.GetGameList();
private void SubscribeToOnGameListEvent()
{
if (!_subscribed)
{
backend.OnGameList += ProcessGameList;
_subscribed = true;
}
}