예외가 발생할 때마다 "응용 프로그램 has stopped working"팝업이 나타나지 않도록하고 싶습니다. 이렇게하는 한 가지 방법은 분명 이런 즉 AppDomain.CurrentDomain.UnhandledException
글로벌 예외 핸들러 Environment.Exit(1)
호출된다 AppDomain.CurrentDomain.UnhandledException 핸들러에서 응용 프로그램을 종료하고 finally {} 블록이 실행되는지 확인하는 방법은 무엇입니까?
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception exc = (Exception)e.ExceptionObject;
Console.Error.WriteLine("Exception:\n{0}", exc.Message);
Console.Error.WriteLine("Stack trace:\n{0}", exc.StackTrace);
Environment.Exit(1); // quit silently on exception, don't show the popup
}
하지만,
finally
블록에서 상기 코드 결과는 실행 순서에 의한 실행하지. 이러한 동작의 간단한 예를 들어이 출력 예외 핸들러 결과
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
try
{
Console.WriteLine("try block");
throw new Exception("Somebody set us up the bomb.");
}
catch
{
Console.Error.WriteLine("catch block");
throw;
}
finally
{
Console.WriteLine("finally block");
}
Environment.Exit(1)
(예고없이 마지막 블록) 도장 전에이 종료 : 그것은 것이 중요 할 때
try block
catch block
Exception:
Somebody set us up the bomb.
Stack trace:
at ...
이 심각한 문제가 발생할 수있다 finally
블록이 실행됩니다. 내부의 임시 파일 정리시 try
.
간단한 문제가 있습니까? 즉, 전역 예외 처리기를 유지하고 내부에 예외 출력 등을 사용자 정의한 다음 정상적으로 종료하지만 여전히 실행하려면 finally
블록을 확보해야합니다. 나는이 문제가 this과 같은 질문에서 언급되지 않았다는 것을 이상하게 생각한다.
+1 누군가가 우리에게 폭탄을 설치했습니다. 귀하의 모든 기지 R은 우리 소유입니다! – jgauffin