2

デスクトップアプリケーションを開発しました。ほぼ完了しましたが、まだいくつかのバグが含まれているため、削除しています。

アプリケーションをラップした一般的な[try...catch]ブロックを使用します

[STAThread]
static void Main()
{
   try
   {
       program = new Program();
       // ...
   }
   catch (Exception x)
   { 
       // ...
       MessageBox.Show(
          message,
          Resources.MESSAGEBOX_ERROR_CRASH_Caption,
          MessageBoxButtons.OK,
          MessageBoxIcon.Error);
   } 
}

私のプログラムクラスコンストラクタは次のとおりです。

public Program()
{
    // [...]
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    // [...]
    frmLogon = new Logon();            
    Application.Run(frmLogon);
}        

未処理の例外がスタック全体でバブルし、少なくとも通信メッセージボックスで応答されるようにするため。

Visual Studio(デバッグモード)でアプリケーションを実行すると正常に動作しますが、アプリケーションを展開してPCにインストールすると、動作しません。これは、バグ(ちなみに、すでに特定済みです)の場合に発生します。 )null配列から読み取るようにします

代替テキスト

なんで?それは本当に私を困惑させます。なぜ「未処理」だったのですか?try ... catchは、リリースモードかデバッグモードかに関係なく機能するはずだというのが私の理解でした。そうでなければ、何がポイントになるのでしょうか。

4

1 に答える 1

1

これはちょっと古いですが、それでも解決策が必要な場合は、いくつかのイベントを処理する必要があり、すべてをtrycatchで囲むことは機能しません。このようなことをします:

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        AppDomain.CurrentDomain.UnhandledException += ProcessAppException;
        Application.ThreadException += ProcessThrException;
        Application.Run(new MainForm());
    }

    private static void ProcessAppException(object sender, UnhandledExceptionEventArgs e)
    {
        XtraFunctions.LogException((Exception)e.ExceptionObject);
        throw (Exception)e.ExceptionObject; //MessageBox in your case.
    }

    private static void ProcessThrException(object sender, ThreadExceptionEventArgs e)
    {
        XtraFunctions.LogException(e.Exception);
        throw e.Exception; //MessageBox in your case.
    }

例外がキャッチされない場合、例外ダイアログを表示する前に、例外の1つを通過します。したがって、それを上書きして、選択した素敵なメッセージを表示するオプションがあります。

于 2010-11-24T03:56:16.273 に答える