2012-01-26 4 views
2

내 코드 이외에도 다양한 사용자 정의 예외가 발생합니다.응용 프로그램을 종료하지 않고 전역 예외를 처리합니까?

이들 중 일부는 복구 할 수 있으므로 글로벌 처리기에서 경고를 표시하고 계속 수행해야합니다.

IsTerminating 인수가있는 AppDomain.UnhandledException 이벤트를 발견했지만이 것은 읽기 전용입니다.

예외를 처리하고 계속 처리 할 수있는 예외를 세계적으로 발견하는 방법이 있습니까?

(이 양식에,하지만 난 너무 WPF 솔루션에 재미있을 것) 당신이하지 않은 오류를 잡으려고 Global.asax에와

void Application_Error(object sender, EventArgs e) 
{ 
} 

이벤트를 사용할 수

+1

가능한 중복 : [링크] (http://stackoverflow.com/questions/4862841/how-to-create-global-error- handler-in-windows-form-application) – StaWho

답변

0

해결책을 찾았습니다. AppDomain.UnhandledException 대신 Application.ThreadException을 사용하십시오. 그러나 당신은 또한 너무 UI 스레드에서 예외를 제공하도록 지시해야합니다

public static void SetupGlobalExceptionHandler() 
{ 
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
    Application.ThreadException += OnException; 
} 

static void OnException(object sender, ThreadExceptionEventArgs args) 
{ 
    MessageBox.Show("There was a problem. Error is:\n\n" + args.Exception.Message); 
} 
0

페이지에 붙 잡혔다. 이 내

, 당신은 방법을 사용할 수 있지만, 하나의 방법은 다음과 같이 될 것이다 :

void Application_Error(object sender, EventArgs e) 
{ 
    Exception opException = Server.GetLastError(); 

    switch (opException.GetBaseException().GetType().Name) 
    { 
     case "OptimisticConcurrencyException": 
         //display a friendly message 
        break; 
    } 


    Server.ClearError(); 

} 

또는 이와 유사한

+0

내가 말했듯이 이것은 ASP가 아니라 Forms입니다. – GazTheDestroyer

+1

아, 죄송합니다. 내 실수는 'Forms'라고 들었고 'WebForms'로 가정했습니다! * facepalm * – dougajmcdonald

0

시도 같은 :

AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; 

public static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    // You might have to try changing this to your custom exception type and then have overloads or pass it as an object and cast it in the HandleException method 
    HandleException(e.ExceptionObject as Exception); 
} 

private static void HandleException(Exception exception) 
{ 
    if (exception == null) return; 

    // Do a check in here against the exceptions that you want to handle or don't want to handle and either display a message, log, quit, etc 
} 

winforms을 발견하지 못했지만, 오랫동안 양식을 작성하지 않았으므로 WPF이거나, 작동하거나, 조정해야 할 수도 있습니다.

+0

이것은 제가 이미하고있는 것과 정확히 같습니다. 이벤트가 발생할 때까지 런타임은 이미 앱을 종료하기로 결정했습니다. 내가 할 수있는 건 메시지를 보여주는거야. – GazTheDestroyer

+0

@GazTheDestroyer 주 응용 프로그램 실행 명령을 try/catch로 래핑하고 HandleException에 전달하면 종료/종료를 호출 할 수 있습니다. – John

+0

Application.Run을 래핑하면 예외가 발생하면 종료됩니다. 앱을 종료하고 싶지 않습니다. – GazTheDestroyer

관련 문제