2009-04-16 15 views
2

.NETのWindowsフォームとWPFアプリケーションにグローバルイベントがありますか?ASP.NETの場合はOn_Error - Global.aspxですか?Windowsアプリケーションでエラーが発生しました

+0

ありがとうございました。 C#のアプリケーションレベルで例外をトレースする方法はありますか。 –

答えて

1
Application.ThreadException 

このイベントは、未処理の例外が発生したときに発生します。

私はほとんどこのイベントを購読し、イベントハンドラでは、発生した例外をログに記録するか、何かが間違っていることを示すMessageBoxを表示します。他の人が述べたように

2

、あなたはこのlinkをチェックし、ユーザーフレンドリーな例外処理にApplication.ThreadException

使用することができます。

  • AppDomain.CurrentDomain.UnhandledException
  • 次のサンプルプログラムのショーを(すでに他の人が指摘したように)Windows.Formsため

    • Application.ThreadException

      [STAThread] static void Main() { 
          Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 
          Application.Run(new Form1()); 
      } 
      
      private void button1_Click(object sender, System.EventArgs e) { 
          throw new Exception("Whoops"); 
      } 
      
      private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { 
          MessageBox.Show(e.Exception.Message); 
      } 
      
    +0

    私はwpfを使用しているので、main()を取得する方法 –

    +0

    はい。しかし、あなたがウィンドウズフォームとして言及した質問では。 –

    +0

    申し訳ありませんが、両方とも同じですが...私はWPFを初めて使っていますが、main()が見つかりませんでした。今私はメイン()を追加する方法を知っているが、becozエラーを取得する私もリソースファイルを持っている –

    1

    は、基本的には、世界的にトラップ未処理の例外への2つのオプションがありますC#でUnhandledExceptionイベントを使用する方法:

    class Program 
    { 
        static void Main(string[] args) 
        { 
         AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
        } 
    
        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
        { 
         Exception ex = (Exception)e.ExceptionObject; 
         Console.WriteLine("Unhandled exception!!"); 
         Console.WriteLine(ex.InnerException.Message); 
        } 
    } 
    
    1

    Application.ThreadExceptionに加えて、AppDomain.CurrentDoman.UnhandledExceptionを処理する必要があります。追加するように編集

    Application.ThreadException += new ThreadExceptionEventHandler(AppExceptionHandler.Application_ThreadException); 
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppExceptionHandler.CurrentDomain_UnhandledException); 
    

    :私のProgram.csファイルのいずれかから関連するスニペットは次のようになります ここでさらに説明good articleです。

    ASP.NETとWinFormsのアプリケーションの両方について
    0

    、AppDomainのUnhandledExceptionイベントがあります:

    Private Sub UnhandledException(ByVal sender As Object, ByVal e As System.UnhandledExceptionEventArgs) 
        Console.WriteLine(vbCrLf & "Unhandled exception:" & vbCrLf & e.ExceptionObject.ToString) 
    End Sub 
    

    ご注意:

    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException 
    

    このハンドラでは、あなたが必要な任意のカスタムロギング/リカバリを実行することができますあなたはではありません。この場合は例外をキャッチまたは処理しています。通知イベントのみを受信して​​います。イベントハンドラでアプリケーションを終了しない限り、例外は上位レベルのフォールトハンドラに伝播されます。これはWinFormsのアプリケーションは通常オペレーティングシステムにあり、「このアプリケーションには...」というクラッシュダイアログが表示されます。

    関連する問題