2010-02-03 6 views
3

Account 개체가 채워진 ListBox가있는 Windows.Forms 앱이 있습니다. 사용자가 목록에서 계정을 선택하면 사용자가보고있는 동안 새로운 계정이있을 경우 선택한 계정 트랜잭션을 업데이트하는 EventHandler를 첨부합니다.이벤트 핸들러 Garbageclection

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selected = listBox1.SelectedItem as Account; 
    if (selected != null) 
    { 
     UpdateTransactions(selected); 
     selected.OnNewTransaction += (s, a) => UpdateTransactions(selected); 
    } 
} 

그럼 내 질문은 다음과 같습니다. 사용자가 목록에서 다른 계정을 선택하고 선택한 계정이 범위를 벗어나는 즉시이 이벤트 핸들러가 자동으로 삭제됩니까? 아니면 계속 켜져 있으며 사용자가 동일한 계정을 다시 선택하면 다른 핸들러가 지정되어 메모리 리크가 생성됩니까?

답변

3

이 남아 있고, 각각의 시간은 사용자가 다시 할당 다시 동일한 계정을 선택합니다.

다시 당신이 이벤트를 부착하는 방식을 조정할해야 이벤트를 분리하기 위해, 참조를 유지 :

EventHandlerType handler = (s, a) => UpdateTransactions(selected); 
selected.OnNewTransaction += handler; 

// When you want to remove the handler do this (make sure you "store" handler somewhere) 
selected.OnNewTransaction -= handler; 
+0

빠른 답변 주셔서 감사합니다 :) – Frank

0

당신은 그것을 분리 할 필요가 수동으로

1

이벤트 핸들러가 Account 객체가 가비지 컬렉션에만 후보 그들 자신이 쓰레기 수집. 예, Account 개체를 명시 적으로 분리하지 않는 한 핸들이 계속 존재합니다. 예, 이벤트에는 첨부 한 핸들이 모두 포함됩니다.