Автоматически отписаться от события - PullRequest
1 голос
/ 03 мая 2010

Возможно ли сделать что-то подобное в C #? Вероятно, с выражениями. EventHandlers не являются членами элемента управления или принадлежащего мне класса.

например:.

Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);

EventHandler - это статическая ссылка, которой я не владею. Как я могу передать этот тип заявления следующей функции?

private void RegisterEvent(EventHandler handler, Action<EventArgs> action)
{
   handler += action;
   m_toUnsubscribe.Add(handler, action);
}

... in Dispose()
{
  foreach(var pair in m_toUnsubscribe)
  {
    pair.handler -= pair.action;
  }
}

Ответы [ 2 ]

3 голосов
/ 03 мая 2010

Как описано в ветке форума, вы можете установить нулевое событие в методе dispose вашего объекта. Конечно, это требует от вашего класса реализации IDisposable.

Вот ссылка: http://channel9.msdn.com/forums/TechOff/148255-Event-disposal/

0 голосов
/ 03 мая 2010

Вы можете взглянуть на это сообщение и использовать ответ, который я разместил. Функция Suppress удалит обработчики из элемента управления. Вы можете изменить это больше в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...