如何在c#中清除事件句柄

时间:2010-06-20 15:27:11

标签: c# event-handling

我正在使用名为“client”的全局变量

例如

client.getPagesCompleted += (s, ee) =>
{
    pages = ee.Result;
    BuildPages(tvPages.Items, 0);
    wait.Close();
};
client.getPagesAsync(cat.MainCategoryID);

我需要清除getPagesCompleted的处理程序并设置另一个处理程序。
如何轻松清理手柄?
我知道client.getPagesCompleted-=new EventHandler(...)。但这很困难。我需要简单的方法。 我正在使用client.getPagesCompleted=null,但显示错误。 "only use += / -+"

3 个答案:

答案 0 :(得分:6)

删除事件处理程序的唯一方法是使用与-=添加的处理程序相同的+=构造。

如果需要添加和删除处理程序,则需要在命名方法中对其进行编码,而不是使用匿名方法/委托。

答案 1 :(得分:2)

您不必将事件处理程序放在单独的方法中;您仍然可以使用lambda函数,但需要将其分配给委托变量。类似的东西:

MyEventHandler handler = (s, ee) => 
{ 
    pages = ee.Result; 
    BuildPages(tvPages.Items, 0); 
    wait.Close(); 
}; 

client.getPagesCompleted += handler; // Add event handler
// ...
client.getPagesCompleted -= handler; // Remove event handler

答案 2 :(得分:0)

将事件对象保存到变量,并使用-=取消订阅。