IT/C#

[C#] ThreadException, UnhandledException 이벤트 (프로그램 강제 종료 방지)

Ella.J 2023. 5. 24. 17:44
728x90
반응형

 

C# Winform 개발 시 처리되지 않은 예외가 발생할 때 사용하는 이벤트로써,

ThreadException을 사용하면 Winform 스레드에서 발생하는 처리되지 않은 예외를 처리할 수 있다.

UnhandledException의 경우에도 이벤트에서 처리되지 않은 예외를 포착하여 비정상적인 애플리케이션 종료를 방지할 수 있다.

 

개발을 진행하다 보면 예외처리가 중요하지만 가끔씩 예상할 수 없는 곳에서 에러가 발생하거나 하는 경우, 프로그램이 강제 종료될 수 있는데 이를 방지하기 위해 전체적으로 처리되지 않은 예외를 핸들링할 수 있기 때문에 필수적으로 등록해줘야 하는 이벤트이다.

 

이를 사용하지 않는 경우 프로그램이 강제 종료될 때 윈도우 '이벤트 뷰어'를 사용하여 왜 프로그램이 강제종료되었는지 확인할 수 있지만, 이 이벤트를 사용하여 강제 종료를 방지하고 로그로 남기면 '이벤트 뷰어'를 확인하지 않고 로그를 통해 어떤 에러가 발생하였는지 확인할 수 있다.

 

 

Document

https://learn.microsoft.com/ko-kr/dotnet/api/system.windows.forms.application.threadexception?view=windowsdesktop-7.0 

 

Application.ThreadException 이벤트 (System.Windows.Forms)

포착되지 않은 스레드 예외가 throw될 때 발생합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/dotnet/api/system.appdomain.unhandledexception?view=net-7.0&viewFallbackFrom=windowsdesktop-7.0 

 

AppDomain.UnhandledException 이벤트 (System)

예외가 catch되지 않으면 발생합니다.

learn.microsoft.com

 

 

C# Sample Code

 

메인 Form이 로드될 때, 혹은 개별적으로 프로그램 부팅 시 사용하는 Initialize 부분에서 이벤트를 등록해주고,

해당 이벤트가 발생할 때 로그로 남게 처리해준다.

해당 이벤트 데이터의 Message와 StackTrace를 같이 남겨주어 에러 발생 원인을 파악할 수 있다.

 

 

비교

위 코드를 사용하지 않고 예상하지 못한 예외가 발생하였을 때, 프로그램 강제종료 발생 이 후 이벤트 뷰어 확인 결과.

 

위 코드를 사용했을 때 Console 창에 남겨지는 로그

StackTrace 데이터를 통해 어떤 클래스, 어떤 함수에서, 몇 번째 줄에서 에러가 발생했는지도 확인이 가능하기 때문에 원인 파악이 쉽다.

 

728x90
반응형