2012-06-13 33 views
6

Tôi có một danh sách các Button, và tôi thêm một event handler cho mỗi nút:Tôi có nên xóa trình xử lý sự kiện không?

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

Sau đó, tôi xóa danh sách:

/* 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

Tôi có thể sai, nhưng tôi không tin btn.Click - = new RoutedEventHandler (OnbtnClick); thậm chí loại bỏ trình xử lý, vì bạn đang sử dụng toán tử mới thay vì trình xử lý được thêm ban đầu. –

+2

@KDiTraglia Đó là một cú pháp hợp lệ, xem [this] (http://msdn.microsoft.com/en-us/library/aa645739 (v = vs.71) .aspx) hướng dẫn. – gliderkite

+0

@gliderkite ah sai lầm của tôi, tôi nghĩ rằng tôi nhớ đọc ở đâu đó rằng nó không hoạt động. –

Trả lời

5

Khi bạn xóa danh sách bạn rõ ràng tất cả các tham chiếu đến xử lý cùng với họ. Khi các trình xử lý của bạn rời khỏi phạm vi (tức là khi hàm cuối cùng thoát ra và không có đối tượng nào có tham chiếu tới trình xử lý được tạo), Trình thu gom rác sẽ lấy xung quanh để loại bỏ tất cả bộ nhớ liên quan (theo lịch trình riêng của khóa học).

Vì vậy, không, bạn không cần phải xóa thủ công các trình xử lý.

Các vấn đề liên quan