Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

Application 내에 처리되지 않은 모든 예외 잡아채기

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 3268

1. 개요
하나의 프로젝트에는 수많은 클래스와 라이브러리,폼 등 각종 모듈들이 존재한다

이 모든 모듈들에서 발생하는 예외를 중앙에서 집중적으로 관리하는 기술을 담고 있다

프로젝트의 메인폼에서 필요한 이벤트를 등록 시킨다. 그러면 프로젝트 하위의 모든 예외는 중앙에서 관리 할 수 있다. 물론 각 모듈에서 별도로 예외 처리를 한다면 이 이벤트로 넘어오지는 않는다.

 

2. 구현을 위한 가이드 라인

1) 응용프로그램의 진입점에 Application.ThreadException 이벤트를 구현하라
   -
응용 프로그램 내에서 포착되지 않은 모든 예외는 모두 이 이벤트를

     통하게 된다.

 

 

* Demo
아래 데모 화면처럼 간단한 계산기 프로그램을 작성한다. 
 

 
  
   

이 프로젝트는 아래와 같은 파일 구조를 가집니다

 

 

 

즉 메인 폼에서 다른 폼을 띄우고 그 폼에서는 계산을 수행하는 역할을 합니다.

이런 구조로 구현한 이유는 메인 폼이 아닌 다른 폼에서 발생한 예외를

메인 폼의 이벤트가 받아서 처리하는 것을 보이기 위해서 입니다

 

1) MainForm 의 진입점에 아래와 같이 구현합니다.

[STAThread]

static void Main()

{                        

//이 프로젝트에서 발생하는 모든 포착되지
//
않은 예외를 처리하는 이벤트를 등록시킨다

             CustomExceptionHandler eh = new CustomExceptionHandler();                                 Application.ThreadException +=

new System.Threading.ThreadExceptionEventHandler(eh.OnThreadException);

             Application.Run(new MainForm());

}

 

2) 실제 예외를 처리 하기 위한 이벤트 클래스를 구현한다

internal class CustomExceptionHandler

{

public void OnThreadException(object sender, System.Threading.ThreadExceptionEventArgs t)

{

             DialogResult result = DialogResult.Cancel;

             try

             {

 //예외을 처리하기 위한 Custom 폼을 띄운다

               result = this.ShowThreadExceptionDialog(t.Exception);

             }

             catch

             {

                 try

                 {

                        MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);

                  }

                  finally

                  {

                               Application.Exit();

                           }

                 }

                                         

             if (result == DialogResult.Abort)

                           Application.Exit();

}

  

private DialogResult ShowThreadExceptionDialog(Exception e)

{                                                                    

               frmException frmexception = new frmException();

               frmexception.ErrorMessage = e.Message ;

               frmexception.ErrorStackTreace = e.StackTrace.ToString();

               frmexception.ShowDialog();                                      

 

               return DialogResult.Ignore;

}

}

 

 

3) 프로그램을 실행하여 예외를 발생시켜 봅니다.

아래에 그림처럼 숫자를 입력해야 하는 텍스트 박스에 의도적으로 문자를 입력 했습니다.

그러면 예외가 발생하여 예외처리를 위한 Custom 폼이 나타나게 됩니다.

 

 

Custom 폼은 예외를 처리하기 위한 적절한 형태의 비즈니스 로직을 가지고 있겠지요.

 

 

이름
비밀번호
홈페이지
SU <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요