2012-06-13 190 views
6

我有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(); 
+0

我可能是错的,但我不相信btn.Click - = new RoutedEventHandler(OnbtnClick);甚至删除处理程序,因为您使用的是新操作符而不是原来的添加处理程序。 –

+2

@KDiTraglia这是一个有效的语法,请参阅[this](http://msdn.microsoft.com/zh-cn/library/aa645739(v = vs.71).aspx)教程。 – gliderkite

+0

@gliderkite啊我的错误,我以为我记得在某个地方看书没有用。 –

回答

5

如果清除列表中,您清楚了所有引用与他们一起处理。一旦你的处理程序离开作用域(也就是说,当函数最终退出并且没有对象引用创建的处理程序时),垃圾收集器将清空所有相关的内存(当然,它自己的时间表)。

所以不,你不需要手动删除处理程序。

相关问题