我应该删除事件处理程序吗?

时间:2012-06-13 18:12:34

标签: c# event-handling

我有一个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();

2 个答案:

答案 0 :(得分:5)

清除列表后,清除对处理程序的所有引用。一旦处理程序离开作用域(也就是说当函数最终退出并且没有对象引用创建的处理程序时),垃圾收集器将绕过去除所有相关内存(当然是按照它自己的时间表)。

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

答案 1 :(得分:1)

检查此解决方案:How to remove all event handlers from a control

这就是你之后的事情。给这个帮助。