2012-04-10 2 views
0

아래 코드로 ChildWindow 로그인이이 경우 GC에서 수집되지 않도록하고 싶습니다. 샘플을 명확히하기 위해 이것은 다른 모든 페이지에 상속 된 실버 라이트 페이지에서 비롯된 것이므로 가상 void pageloaded 메소드입니다.ChildWindows를 사용하는 이벤트 핸들러 메모리 누수

public class MyPage : Page 
{ 
    // Executes when the user navigates to this page. 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     _user = App.AuthenticatedUser; 
     if (!_user.IsValid) 
     { 
      Login loginWindow = new Login(_user); 
      loginWindow.Closed += new EventHandler(PageLoaded); 
      loginWindow.Show(); 
     } 
     else 
      PageLoaded(this, e); 
    } 

    //to be overridden by the pages extending this page control 
    protected virtual void PageLoaded(object sender, EventArgs e) { } 

도움 주셔서 감사합니다.

답변

0

괜찮습니다. loginWindows의 Close 이벤트는 처리기를 알고 있으며, 다른 방식으로는 처리하지 않습니다. 따라서 GC가 처리하지 못하게하는 양식이 양식에 없습니다.

이벤트가 정의 된 개체가 오랫동안 응용 프로그램에 유지되고 이벤트 처리기 연결이 동일한 기간 동안 지속되는 것을 원하지 않으면 이벤트 처리기 등록 취소가 중요합니다.