我正在使用名为“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 += / -+"
答案 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)
将事件对象保存到变量,并使用-=
取消订阅。