2012-06-13 245 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

如果清除列表中,您清楚了所有引用與他們一起處理。一旦你的處理程序離開作用域(也就是說,當函數最終退出並且沒有對象引用創建的處理程序時),垃圾收集器將清空所有相關的內存(當然,它自己的時間表)。

所以不,你不需要手動刪除處理程序。

相關問題