2009-10-21 4 views
23

C# 프로그램은 다음과 같이 호출됩니다.try/catch 전체 C# 프로그램이 가능합니까?

Application.Run (new formClass()); 

모든 catch되지 않은 예외를 잡으려고 모든 것을 try/catch하고 싶습니다. 이 Run 메서드를 놓으면 예외가 catch되지 않습니다. 제어가 잡히지 않은 예외 후에 프로그램이 종료 될 때만 여기에 반환됩니다.

어디에서 전체 프로그램을 다루기 위해 try/catch를 넣을 수 있습니까? 감사!

+4

나는 다음 코드에서 아래로 아래 주소 필요가 뭔가 잘못 거기에 예외가 응용 프로그램의 최상위 계층까지 거품 경우, 예외 처리의 포인트를 누락 생각합니다. catch가 실패 할 가능성이있는 코드를 try/catch하고 가능한 경우 catch를 제공하십시오. 앱을 완화 할 수 없다면 (즉, 앱을 복구 할 수없는 경우) 애플리케이션을 실패해야합니다. – Lazarus

+13

OP는 예외를 어떻게 사용해야하는지 묻지 않습니다. 특정 시나리오에서 예외를 잡는 방법입니다. 분명히 예외가 상위 레이어에 버블되면 뭔가 잘못되었습니다 - 뭔가 잘못되었을 때 더 많은 정보를 찾아서 해결할 수있는 것처럼 보입니다. Mitch의 대답은 op가 자기가하는 일을 모른다고 가정하는 것보다 훨씬 더 유용합니다. – Maggie

+9

최상위 레벨에서 모든 예외를 포착하는 것은 종료하기 전에 일어난 일을보고하기위한 최종 노력에 매우 유용 할 수 있습니다. 많은 경우이 표준 Windows "이 프로그램이 충돌했습니다. Microsoft에보고하십시오."대화 상자가 더 좋습니다. – noctonura

답변

37

Windows Form의 처리되지 않은 예외를 catch하려면 AppDomain.UnhandledExceptionApplication.ThreadException 이벤트를 연결하십시오. 관심의

는 : 프로세스를 호스팅하는 기본 CLR을 사용하는 경우 Unexpected Errors in Managed Applications

+2

@alankdkd : 당신이 끝과 "일부 모범 사례"섹션을 읽어 있는지 확인한다) – Lazarus

+1

당신은 AppDomain.UnhandledException''에 예외를 (여전히 응용 프로그램을 종료합니다) 잡을 수없는 것이 아니라 단지 알림을받을. 이것은 예외 잡기 인'Application.ThreadException'과 비교하여 중요한 차이입니다. – Lucero

+0

UnhandledException이 작동하지 않습니다.

 AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); 
을하지만 예외가있을 때 myHandler가 호출되지 않습니다 : 나는 시도했습니다. ThreadException을 시도 할 것입니다 ... – user20493

8

기본적으로, 당신은 모든 예외를 잡을 수 없습니다. 기간. 이는 AppDomain.UnhandledException 이벤트가 알림 일 뿐이므로 예외를 처리 할 수 ​​없기 때문에 (즉, 알림 처리 후 응용 프로그램이 종료되지 않도록 할 수는 없음).

그러나 Application.ThreadException 처리기 (control the behavior : UnhandledExceptionMode)를 사용하여 WinForms 응용 프로그램의 UI 스레드에서 모든 예외를 catch하고 처리 할 수 ​​있습니다. 예외를 throw하는 다른 thread는이 핸들러에 의해 캐치되지 않습니다. 일반적으로

, 그것은 시도하고 모든 예외를 처리하는 것은 좋은 생각이 아니다. 당신은, 그러나, 중요한 정리 작업을 오류 로그 및/또는 수행 할 AppDomain.UnhandledException을 사용할 수 있습니다 (예를 들어, 어떤 파일 기반 databaseor 종료).

관련 문제