2012-01-18 3 views

답변

11

알려진 문제입니다.

사용이 대신

yourWindow.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; 

    private void Dispatcher_ShutdownStarted(object sender, EventArgs e) 
    { 
     //do what you want to do on closing 
    } 

읽기 자세한 내용

에 대한 this 편집

당신이 정말로 얻으려면이

yourWindow.Closing += new CancelEventHandler(YourWindow_Closing); 

void YourWindow_Closing(object sender, CancelEventArgs e) 
{ 

} 
+1

이 이벤트도 obj.Close() 이후에 실행되지 않습니다. 전체 응용 프로그램을 닫을 때만 발생합니다. – HotTester

+0

당신은'obj.Dispatcher.ShutdownStarted'를 제대로하고 있습니까? –

+0

예. 나는 Dispatcher.ShutdownStarted + Dispatcher_ShutdownStarted를 만들었습니다. 대화 상자 창 생성자에서 위의 함수로 이벤트를 작성합니다. – HotTester

0

시도 작동하지 않습니다 위의 경우 conf 폐회에 대한 확인은 창문의 수명주기와 발생하는 관련 사건을 이해하는 것이 최선이라고 생각합니다.

그러나 내 생각에 가장 좋은 확인 소스는 Closed 이벤트입니다. ClosingClosed : 다른 프레임 워크 방법 어쩌면 신뢰할 수없는

닫기 이벤트

창이 닫

, 그것은 두 개의 이벤트를 발생시킵니다.

닫히기 전에 창이 닫히고 창 폐쇄가 방지 될 수있는 메커니즘이 제공됩니다. 창이 닫히는 것을 막기위한 하나의 일반적인 이유는 창이 내용에 수정 된 데이터가 포함되어있는 경우입니다. 이 경우 Closing 이벤트를 처리하여 데이터가 더티인지 확인하고, 그렇다면 데이터를 저장하지 않고 창을 계속 닫을 지 또는 창을 닫을지를 사용자에게 묻습니다. 다음 예는 Closing을 처리하는 의 주요 측면을 보여줍니다.

더욱 더

닫는 이벤트 핸들러는 당신이 폐쇄에서 창을 방지하기 위해 true로 설정 BooleanCancel 속성을 구현하는 CancelEventArgs를 전달됩니다. +

결산이 처리되지 않거나 처리되었지만 취소되지 않은 경우 창이 닫힙니다. 실제로 창이 닫히기 바로 전에 닫힌 것은 입니다. 이 시점에서 창을 닫을 수 없습니다.

참고

윈도우를 명시 비 클라이언트 및 클라이언트 영역에 설치된 메커니즘을 통해 폐쇄 될 수 있지만, 창은 내재적 기타의 동작의 결과로 폐쇄 될 수있는

  • 사용자가 로그 오프 또는 닫힌다 할 : 다음과 같은 응용 프로그램이나 윈도우의 일부, Windows.

  • 창 소유자가 닫힙니다.

  • 주 응용 프로그램 창이 닫히고 ShutdownMode가 OnMainWindowClose입니다.

  • 종료가 호출되었습니다.

모든 창 수명 이벤트

다음 그림은 윈도우의 수명에 주요 이벤트의 순서를 보여줍니다.

enter image description here

다음 그림 (윈도우가 표시되기 전에 ShowActivated가 false로 설정되어) 활성화없이 표시되는 창의 수명 주 이벤트의 시퀀스를 도시한다.

enter image description here

관련 문제