본문 바로가기

Dev::DotNet/C#

Unhandled Exception 에 대한 처리

Exception 처리를 하지 않은 부분에서 예외가 발생하여


프로그램이 죽어버리는 경우가 종종 발생한다.


최대한 예외처리를 해서 그런일이 발생하지 않게 하는 것이 가장 좋은 방법이지만...


사람인지라....


그래서 찾아보니 Unhandled Exception 을 잡아낼 수 있는 방법을 닷넷에서 제공하고 있었다.


Winform / WPF 는 좀 다르긴 하지만 처음에 Application 을 통해서 시작하는데.


Winform 은 아래의 event delegate 를 사용하여 가능하며


System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);


System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException);


......


private void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)

{

// 예외 처리

}


private void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e)

{

// 예외 처리

}


WPF 는 생성한 Application 객체의 Dispatcher.UnhandledException event delegate 를 사용한다.


System.Windows.Application app = new System.Windows.Application();


app.Dispatcher.UnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(Dispatcher_UnhandledException);


.......


static void Dispatcher_UnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)

{

// 예외처리

}


해당 예외가 발생하는 부분에서 하는 작업이 아닌지라 정확한 예외처리는 힘들수도 있지만

최소한의 처리나 프로그램이 죽는 것은 막을 수 있을 거 같다.