我应该删除一个事件处理程序吗?
问题描述:
我有Button
列表,我添加事件处理程序为每个按钮:我应该删除一个事件处理程序吗?
List<Button> buttons = new List<Button>();
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Click = new RoutedEventHandler(OnbtnClick);
buttons.Add(btn);
}
然后我清空列表:
/* Have I to remove all events here (before cleaning the list), or not?
foreach (Button btn in buttons)
btn.Click -= new RoutedEventHandler(OnbtnClick);
*/
buttons.Clear();
答
如果清除列表中,您清楚了所有引用与他们一起处理。一旦你的处理程序离开作用域(也就是说,当函数最终退出并且没有对象引用创建的处理程序时),垃圾收集器将清空所有相关的内存(当然,它自己的时间表)。
所以不,你不需要手动删除处理程序。
我可能是错的,但我不相信btn.Click - = new RoutedEventHandler(OnbtnClick);甚至删除处理程序,因为您使用的是新操作符而不是原来的添加处理程序。 –
@KDiTraglia这是一个有效的语法,请参阅[this](http://msdn.microsoft.com/zh-cn/library/aa645739(v = vs.71).aspx)教程。 – gliderkite
@gliderkite啊我的错误,我以为我记得在某个地方看书没有用。 –