2010-06-20 81 views
1

我使用一个名为“客户”的全局变量如何清除事件处理在C#

例如

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 +=/-+"

回答

0

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

6

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

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

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