В основном существует два шаблона, позволяющих избежать дублирования регистрации обработчиков событий: (Согласно этому обсуждению: шаблон C # для предотвращения перехвата обработчика событий дважды)
Используя пространство имен System.Linq, и проверьте, зарегистрирован ли обработчик событий, вызвав
GetInvocationList().Contains(MyEventHandlerMethod);
Отмените регистрацию перед регистрацией, например:
MyEvent -= MyEventHandlerMethod; MyEvent += MyEventHandlerMethod;
Мой вопрос: с точки зрения производительности, какой из них лучше, или между ними есть значительная разница в производительности?
Contains()
, потому что+=/-=
внутренне все равно нужно будет перебирать список вызовов, а затем дважды манипулировать им. Но, как говорит Enigmativity, вы вряд ли попадете в ситуацию, когда это будет иметь какое-либо значение. - person Rhumborl   schedule 30.12.2014