2010-01-26 4 views
1

나는 WPF 응용 프로그램에서 처리되지 않은 예외를 표시하려면 다음 코드를 사용하고 있습니다 :WPF 응용 프로그램의 인스턴스화 중에 throw 된 예외를 처리하는 방법?


     public MyApplication() { 
      this.DispatcherUnhandledException += (o, e) => { 
       var exceptionMessage = new ExceptionWindow(); 
       exceptionMessage.ExceptionMessage.Text = e.Exception.Message; 
       exceptionMessage.ExceptionCallStack.Text = e.Exception.StackTrace; 
       exceptionMessage.ExceptionInnerException.Text = e.Exception.InnerException.Message; 
       exceptionMessage.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
       exceptionMessage.WindowStyle = WindowStyle.ToolWindow; 
       exceptionMessage.ShowDialog(); 
       e.Handled = true; 
       Shell.Close(); 
      }; 
     } 

내가 응용 프로그램의 인스턴스화하는 동안 예외가 있음을 밝혀, 그래서 응용 프로그램 생성자가 실행되지 않습니다.

다른 예외와 달리 간단한 방법은 앱의 구성 파일에 태그 앞에 "<"을 추가하여 실행하는 것입니다.

응용 프로그램 생성자가 호출되기 전에 나타나는 쓸모없는 오류 메시지입니다. alt text http://srtsolutions.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mikewoelmer/ExceptionWPF1_5F00_1C1F39AA.jpg

아무도 이러한 종류의 예외를 잡는 방법을 알고 있습니까?

비고 : Caliburn을 사용 중이며 신청서가 CaliburnApplication을 확장했습니다.

+0

호기심에서 벗어나서 왜 예외를 잡으시겠습니까? 프로그램이 유효하지 않기 때문에 정상적으로 처리 할 수 ​​없습니다. –

+0

내 진짜 문제는 설정 파일의 섹션이 없어서 FirebirdSql.Data.FirebirdClient.dll에서 예외입니다. 나는 이미이 문제를 해결했지만, 예외를 식별하는 것은 쉬운 일이 아니었다. 왜냐하면 그것은 dev 시스템에서 발생하지 않기 때문이다. 난 다른 예외가 충분히 예외적 인 세부 사항을주지 않으면 서 이런 식으로 던지지 않도록하고 싶다. –

답변

3

오케이. 나는 다음을 수행하여 문제를 해결 :

  • 변경 PageApplicationDefinition에서 App.xaml 파일의 Build Action을.


    public class AppStartup { 
     [STAThread] 
     static public void Main(string[] args) { 
      try { 
       App app = new App(); 
       app.InitializeComponent(); 
       app.Run(); 
      } 
      catch (Exception e) { 
       MessageBox.Show(e.Message + "\r\r" + e.StackTrace, "Application Exception", MessageBoxButton.OK, MessageBoxImage.Error); 
      } 
     } 
    } 

그것은 이것에 의해 생성 된 App.g.cs 주요 방법을 대체하는, 그래서 우리는 예외를 잡을 수있는 기회를 가지고 :

  • 는 다음과 같이 새로운 클래스를 만듭니다.