自动取消订阅活动

时间:2010-05-03 16:48:26

标签: c# events

是否可以在C#中执行此类操作?可能与表达式。 EventHandlers不是Control的成员或我拥有的任何类。

E.g:

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 个答案:

答案 0 :(得分:3)

如论坛帖子中所述,您可以在对象的dispose方法中将事件设置为null。当然,这需要您的班级实现IDisposable。

此处链接:http://channel9.msdn.com/forums/TechOff/148255-Event-disposal/

答案 1 :(得分:0)

您可以查看this post并使用我发布的答案。 Suppress函数将从控件中删除处理程序。您可以根据自己的需要进行更多修改。