2011-01-03 13 views
3

ウィンドウフォームのクラッシュを追跡するにはどうすればよいですか?他のイベントが呼び出されたり、何かが呼び出されたり、ウィンドウのフォームがクラッシュしたことを追跡できますか? disposeと呼ばれるように、ウィンドウフォームがクラッシュします。しかし、私たちは窓のフォームのクラッシュを追跡することができるように起こって何か他の?ウィンドウフォームのクラッシュを追跡するには?

私はメインフォームの各コントロールのために移動するメインフォーム上にチュートリアルのバルーンがあり、メインフォームのコントロールを1つずつ表示することによってアプリケーションの機能を説明するという点で1つのウィンドウアプリケーションがあります。そして、吹き出しが移動するたびに、吹き出しが破棄され、新しい吹き出しが作成されます。

ここで、バルーンがクラッシュしたときにデータベースにステップ番号を挿入します。私は何をすべきか理解できません。そのバルーンウィンドウ(ウィンドウフォーム)がクラッシュしたとき何が起こりますか?発生するdisposeイベントがありますが、バルーンが作成されるたびに発生し、クラッシュを追跡するために他に何かがありますか?

編集:申し訳ありませんが、私はそれが.net framework 2.0であることを指定するのを忘れていました。任意のundhandled例外はフォームのスレッドで発生した場合、それはここで取得しますhttp://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx

+1

本当に「クラッシュした」という意味ですか、バルーンが閉じているのですか?あるバルーンが閉じてどこかにログするたびにそれを追跡して、チュートリアルのその部分を再度表示する必要はないと思います。私が間違っているなら、私を訂正してください。 – decyclone

答えて

1

Program.csファイルで、Main()関数内にtry/catchブロックを配置します。そのようなブロック内にApplication.Run(yourformhere)を置くことです。キャッチ内では、おそらく、バルーンがフォームをクラッシュさせたような状態をDBに保存することができます。がんばろう!

+0

しかし、そのバルーンウィンドウフォームのプロジェクトでは、main()関数はありません。 – Harikrishna

+0

** YOUR **アプリのMain()関数にtry/catchを入れてみてください。 – tzup

3

はこれを使用してください。 nullの場合、通常のダイアログが表示されます(処理されない例外が発生しました。続行または終了してスタックトレースを表示できます)。

+0

添付のデバッガを使用する代わりに、これは良い考えです。あなたのアプリケーションが管理者権限で実行されているか、MSDNサンプル自体のEventLog.CreateEventSourceが例外を発生させるようにしてください。 –

+0

.NETフレームワーク2.0で使用できますか? – Harikrishna

+0

もちろん、そうではありませんか? winformsの基本は決して変化しません。 – fejesjoco

2

これは小さな窓は私の2.0プログラムフォームからの抜粋である:

[STAThread] 
private static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    Application.ThreadException += 
     applicationThreadException; 

    // Set the unhandled exception mode to force all Windows Forms 
    // errors to go through our handler. 
    Application.SetUnhandledExceptionMode(
     UnhandledExceptionMode.CatchException); 

    AppDomain.CurrentDomain.UnhandledException += 
     currentDomainUnhandledException; 

    ... 
} 
2つのハンドラで

private static void currentDomainUnhandledException(
    object sender, 
    UnhandledExceptionEventArgs e) 
{ 
    handleException(e.ExceptionObject as Exception); 
} 

private static void applicationThreadException(
    object sender, 
    ThreadExceptionEventArgs e) 
{ 
    handleException(e.Exception); 
} 

処理する実際の機能を私の例では例外があります:

private static void handleException(
    Exception exception) 
{ 
    LogCentral.Current.LogError(
     @"Exception occurred.", 
     exception); 

    if (ErrorForm.IsErrorFormShowing) 
    { 
     LogCentral.Current.LogInfo(
      @"Error form already showing, not showing again.", 
      exception); 
    } 
    else 
    { 
     using (var form = new ErrorForm(exception)) 
     { 
      var result = form.ShowDialog(); 

      if (result == DialogResult.Abort) 
      { 
       Application.Exit(); 
      } 
     } 
    } 
} 

I.e. log4netを介してエラーを記録し、エラーフォームを表示してユーザーに詳細情報(例外メッセージ)を表示し、アプリケーションを終了できるようにします。

関連する問題