2012-06-13 3 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); 원래 추가 된 처리기 대신 new 연산자를 사용하기 때문에 핸들러도 제거됩니다. –

+2

@KDiTraglia 유효한 구문입니다. [this] (http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx) 자습서를 참조하십시오. – gliderkite

+0

@gliderkite 아, 내 실수. 어딘가에서 독서가 기억 나지 않는다고 생각했다. –

답변

5

당신은 목록을 지우에게 모든 참조를 취소하면 그들과 함께 처리기. 일단 핸들러가 범위를 벗어나면 (함수가 마침내 종료되고 생성 된 핸들러에 대한 참조를 가진 객체가없는 경우) 가비지 콜렉터는 관련된 모든 메모리를 제거하려고합니다 (자체 스케줄에서).

아니요, 따라서 핸들러를 수동으로 삭제하지 않아도됩니다.

관련 문제