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();
4

2 回答 2

6

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

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

于 2012-06-13T18:14:38.313 回答
1

检查此解决方案:如何从控件中删除所有事件处理程序

这就是你之后的样子。希望这能有所帮助。

于 2012-06-13T18:20:01.740 回答