2013-06-13 2 views
0

WindowsForms와 WPF가 혼합 된 응용 프로그램이 있습니다. Main 메서드에서 Just-In-Time 디버거 창이 표시되지 않습니다.

나는이 다음 CurrentDomain_UnhandledException 방법에
AppDomain.Currentdomain.UnhandledException += 
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

나는 "그만" "계속하기"버튼이있는 대화 상자를 표시합니다. 사용자가 "quit"버튼을 클릭하면 대화 상자를 닫고 Application.Exit (새 CancelEventArgs (true))를 호출합니다. 사용자가 "계속"버튼을 클릭하면 대화 상자가 닫힙니다.

Wpf Form 중 하나가 열려 있고 예외가 발생하면이 대화 상자에 "계속"또는 "종료"단추가 표시됩니다.이 Just-In-Time 디버거 창과 응용 프로그램이 모두 닫힙니다. 사례. 이것을 방지하는 방법? 당신이 그냥 어떻게 AppDomain.UnhandledException 이벤트 작품 인 e.Handled = true

+0

글쎄, 디버거 (기본값 : Ctrl + F5)를 사용하지 않고 프로젝트를 시작할 수는 있지만 설명에 따르면 "프로그램이 다운되었습니다"라는 메시지가 나타납니다. – Nolonar

+0

그게 정확히 내가 뭘하는지 그리고 이것은 단지 발생합니다 – Brij

답변

1

당신은 우리는이처럼 사용하는 Application.DispatcherUnhandledException

를 사용할 필요가 . 제기되면 프로그램이 이미 종료되어 더 이상 계속할 수 없습니다. Application.Exit()을 호출하면 의도 한 효과가 발생하지 않습니다. 당신이 그것을 부르면 안된다. way 그것은 또 다른 충돌을 야기하기 쉽기 때문에 너무 위험하다.

이벤트 처리기가 실행될 때 프로그램이 실행을 계속할 수 없으면 끝납니다. 예외를 기록하거나 메시지 상자를 표시하는 것만 큼 가능한 최소한의 작업을 수행하십시오. 충돌 이유와 스택 추적을 제공하므로 e.UnhandledException.ToString()을 보존해야합니다. 충돌의 원인을 진단하는 데 매우 유용합니다.

이벤트 처리기에서 돌아 오면 일반 처리되지 않은 예외 처리가 발생합니다. 사용자의 컴퓨터에있는 Windows 오류보고 대화 상자에서 JIT 디버거가 발생합니다. 대신 프로그램이 종료되도록 Environment.Exit()을 호출해야합니다.

+0

저스틴, 왜 AppDomain.Currentdomain.UnhandledException wpf에서 하루의 끝에 호출되지 않습니다? – Brij

+0

호출됩니다. 그러나 해당 응용 프로그램은 이미 그 시점에서 죽었습니다 –

+0

"죽었습니다"라고 말하면 응용 프로그램이 더 이상 계속되지 않는다는 것을 의미합니까? 내 응용 프로그램에서 처리기 메서드는 단순히보고 옵션이있는 대화 상자를 표시하고 사용자는 계속하거나 종료 할 수 있습니다. 계속할 경우 응용 프로그램은 계속 실행됩니다. – Brij

1

설정해야

System.Windows.Application.Current.DispatcherUnhandledException += 
    OnWpfUnhandledException; 

그리고 :

관련 문제