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

C# 我应该删除事件处理程序吗?,c#,event-handling,C#,Event Handling,我有一个按钮列表,我为每个按钮添加了一个事件处理程序: 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); } 清除列表时,将清除对处理程序的所有引用。一旦处理程序离

我有一个
按钮列表
,我为每个按钮添加了一个事件处理程序:

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);
}

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

因此,不需要手动删除处理程序。

检查此解决方案:


这就是你想要的。希望这有帮助。

我可能错了,但我不相信btn。单击-=newroutedeventhandler(OnbtnClick);甚至删除了处理程序,因为您使用的是新的运算符而不是原来添加的处理程序。@KDiTraglia这是一个有效的语法,请参阅教程。@gliderkite啊,我的错误,我记得我在某个地方读到它不起作用。@KDiTraglia使用lambda取消订阅不起作用,顺便说一句。单击-=(x,y)=>SomeMethod。也许你就是这么想的?
/* 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();