내 WPF 응용 프로그램에서 창을 만들고 ShowDialog() 메서드로 호출하여 대화 상자로 표시합니다. 그러나 Close() 메서드로 창을 닫을 때 Unloaded 이벤트는이 대화 상자 창에 대해 발생하지 않습니다.WPF에서 언로드 된 이벤트가 실행되지 않는 이유는 무엇입니까?
MyWindow obj = new MyWindow();
obj.ShowDialog();
obj.Close();
내 WPF 응용 프로그램에서 창을 만들고 ShowDialog() 메서드로 호출하여 대화 상자로 표시합니다. 그러나 Close() 메서드로 창을 닫을 때 Unloaded 이벤트는이 대화 상자 창에 대해 발생하지 않습니다.WPF에서 언로드 된 이벤트가 실행되지 않는 이유는 무엇입니까?
MyWindow obj = new MyWindow();
obj.ShowDialog();
obj.Close();
알려진 문제입니다.
사용이 대신
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)
{
}
시도 작동하지 않습니다 위의 경우 conf 폐회에 대한 확인은 창문의 수명주기와 발생하는 관련 사건을 이해하는 것이 최선이라고 생각합니다.
그러나 내 생각에 가장 좋은 확인 소스는 Closed
이벤트입니다. Closing 및 Closed : 다른 프레임 워크 방법 어쩌면 신뢰할 수없는
창이 닫
, 그것은 두 개의 이벤트를 발생시킵니다.닫히기 전에 창이 닫히고 창 폐쇄가 방지 될 수있는 메커니즘이 제공됩니다. 창이 닫히는 것을 막기위한 하나의 일반적인 이유는 창이 내용에 수정 된 데이터가 포함되어있는 경우입니다. 이 경우 Closing 이벤트를 처리하여 데이터가 더티인지 확인하고, 그렇다면 데이터를 저장하지 않고 창을 계속 닫을 지 또는 창을 닫을지를 사용자에게 묻습니다. 다음 예는 Closing을 처리하는 의 주요 측면을 보여줍니다.
더욱 더
닫는 이벤트 핸들러는 당신이 폐쇄에서 창을 방지하기 위해 true로 설정 BooleanCancel 속성을 구현하는 CancelEventArgs를 전달됩니다. +
결산이 처리되지 않거나 처리되었지만 취소되지 않은 경우 창이 닫힙니다. 실제로 창이 닫히기 바로 전에 닫힌 것은 입니다. 이 시점에서 창을 닫을 수 없습니다.
참고
윈도우를 명시 비 클라이언트 및 클라이언트 영역에 설치된 메커니즘을 통해 폐쇄 될 수 있지만, 창은 내재적 기타의 동작의 결과로 폐쇄 될 수있는
이
사용자가 로그 오프 또는 닫힌다 할 : 다음과 같은 응용 프로그램이나 윈도우의 일부, Windows.
창 소유자가 닫힙니다.
주 응용 프로그램 창이 닫히고 ShutdownMode가 OnMainWindowClose입니다.
종료가 호출되었습니다.
다음 그림은 윈도우의 수명에 주요 이벤트의 순서를 보여줍니다.
다음 그림 (윈도우가 표시되기 전에 ShowActivated가 false로 설정되어) 활성화없이 표시되는 창의 수명 주 이벤트의 시퀀스를 도시한다.
이 이벤트도 obj.Close() 이후에 실행되지 않습니다. 전체 응용 프로그램을 닫을 때만 발생합니다. – HotTester
당신은'obj.Dispatcher.ShutdownStarted'를 제대로하고 있습니까? –
예. 나는 Dispatcher.ShutdownStarted + Dispatcher_ShutdownStarted를 만들었습니다. 대화 상자 창 생성자에서 위의 함수로 이벤트를 작성합니다. – HotTester