2012-05-15 4 views
3

내 응용 프로그램에 예외가 발생하여 처리 할 수없는 경우 사용자에게 오류 메시지를 표시하고 종료하려고합니다. 문제는 사용자가 세부 정보, 계속 및 종료 옵션이있는 예외 대화 상자가 표시되고 사용자가 계속을 클릭하면 응용 프로그램이 내가 원하지 않는 "일부"상태로 계속 살아 있다는 것입니다. 처리되지 않은 예외에서 응용 프로그램이 죽지 않습니까?

난 그냥, 윈도우가 양식 응용 프로그램을 만든 버튼을 추가 코드의 최소 금액과 그 복제 및 버튼 클릭 코드 만 작성하려면
throw new ApplicationException("I must crash now!!!"); 

는 디버그에서 EXE 컴파일 시작할 때 폴더, Release 폴더 또는 다른 곳에서 복사 된 Release 폴더에서 exe를 시작합니다 (pdb 파일로 인해 문제가 발생하는 경우) 버튼을 클릭하면 Details/Continue/Quit 대화 상자가 표시됩니다. 신청서가 살아있다. 계속 옵션이 나타나지 않게하려면 어떻게합니까?

내 컴퓨터 (Vista, Visual Studio 2008, Visual Studio 2010, VS2010이있는 테스트 응용 프로그램 만들기) 및 사용자 컴퓨터 (Windows 7)에서도이 동작이 발생합니다.

답변

4

이 예외를 catch하고 피하고 싶은 대화 상자를 표시하는 윈도우 폼이다. Application.SetUnhandledExceptionMode 메서드를 사용하여이 작업을 수행하지 않도록 Windows Forms를 구성 할 수 있습니다.

+0

UnhandledExceptionMode.ThrowException로 설정하면 작동합니다. 따라서 Windows Forms는 "처리되지 않은 예외를 처리하고 있습니다"라고 생각됩니다. .Net에서 처리되지 않은 예외에 대한 기본 옵션으로 Continue를 사용하는 이유는 무엇입니까? – user755327

+0

@ user755327 : Windows Forms의 디자이너는 이유에 대한 질문에 더 잘 답변 할 수 있지만 Continue 및 Quit 단추가있는 대화 상자는 항상 Windows Forms에있었습니다. 그것은 Windows Forms 특정 기능이며 .NET 기능은 아닙니다. –

3

AppDomain.UnhandledException 이벤트에 대한 이벤트 처리기를 작성해야 사용자에게 더 멋진 오류 메시지가 표시됩니다.

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

곰 염두에하지만, 예외도 당신의 오류 대화 상자가 표시 문제가있을 수 있도록 시스템이 정의되지 않은 상태에 있음을 의미 할 수 있다는 것을 ... 당신은 할 수 있어야합니다 정상적으로 충돌합니다. 응용 프로그램의 시작 지점에서

는 :

static void Main() { 
    AppDomain currentDomain = AppDomain.CurrentDomain; 
    currentDomain.UnhandledException += errorHandler; 
    // Then start your app! 
} 

static void errorHandler(object sender, UnhandledExceptionEventArgs args) { 
    // Show the user some error, but be prepared for disaster... 
    // Examine the args.ExceptionObject (which is an Exception) 
} 
+0

나는 실제로 더 멋진 오류 메시지를 표시하는 것에 신경 쓰지 않고, 응용 프로그램이 완전히 죽을 것이라고 확신하고 싶습니다. 내 문제는 "계속"옵션을 사용할 수 있습니다. 귀하의 링크는 "시스템 기본 처리기가 예외를 사용자에게보고하고 응용 프로그램을 종료하기 전에 응용 프로그램이 예외에 대한 정보를 기록 할 수있게합니다"라고 말합니다. 응용 프로그램을 종료하지는 않습니다. – user755327

+0

문제는 예외가 Windows Forms에서 처리되고이 경우'UnhandledException' 핸들러가 호출되지 않는다고 생각합니다. –

관련 문제