2

未処理の例外が発生したときにポップアップする素敵な Windows フォームを作成する方法を見つけようとしています。私は現在持っています:

// Add the event handler for handling UI thread exceptions
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException );

// Add the event handler for handling non-UI thread exceptions
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurrentDomain_UnhandledException );

static void CurrentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e )
{
    MessageBox.Show( e.ToString( ), "Unhandled Non-UI Thread Exception" );
}

static void Application_ThreadException( object sender, ThreadExceptionEventArgs e )
{
    MessageBox.Show( e.ToString( ), "Unhandled UI Thread Exception" );
}

しかし、私が探しているのは、threadexception メソッドで、エラーに関する情報を含む Windows フォームをポップアップし、続行/終了/再起動することです。これは、ググると、特定の場合に組み込まれているように見えるものと非常によく似ていますが、呼び出すことができる何らかの変更可能/カスタムのものを作成することは可能ですか?

申し訳ありませんが、コードの間違った部分を意図せずに貼り付けました。現在、メッセージ ボックスを使用していますが、いくつかの機能的なボタンを備えた、もう少し強化されたメッセージ ボックスが必要です。

本当にありがとう。

4

6 に答える 6

4

すべてのイベントは、次のようなコードでラップする必要があります。

DialogResult result = DialogResult.Retry;
while (result == DialogResult.Retry) {
    try {
        DoProcess();
        break;
    }
    catch (Exception ex) {
        result = MessageBox.Show(ex.ToString(), 
                    "Error Information", 
                    MessageBoxButtons.AbortRetryIgnore,
                    MessageBoxIcon.Exclamation);
        if (result == DialogResult.Abort) throw;
    }
}

DoProcess()危険なコードはどこにありますか。

于 2012-10-25T14:05:00.350 に答える
4

MessageBox をポップするのはどうですか?ここを見てください http://www.dotnetperls.com/messagebox-show

于 2012-10-25T14:00:59.813 に答える
3

もちろん、古いフォームを作成しShowDialog、その時点で使用して表示するだけです。好きなものを載せることができます。次に、「続行」、「再起動」、「終了」などのさまざまなボタンを配置できます。その後、ShowDialogリターン後にフォームのプロパティを調べて、クリックされたボタンに基づいて何をすべきかを判断できます。

于 2012-10-25T14:02:51.787 に答える
0

エラーが発生したときにポップアップするカスタム ウィンドウを作成します。次に、アプリケーションを閉じるか、特定のプロセスを続行するか終了するかを決定できます。

私が考えることができる最善のアプローチは、アプリケーションで特定の問題が発生したときにスローするカスタム例外を作成することです。次に、この例外が発生し、次のいずれかで処理されるようにする必要があります。

Application.ThreadException AppDomain.CurrentDomain.UnhandledException

詳細については、このリンクを確認してください。

msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx

于 2012-10-25T14:13:07.903 に答える
0

カスタム メッセージ ボックスを作成します。これは From から継承する必要があります

class MyDialog : Form
    {
        //your properties like buttons and all goes here
    private Button okButton;
    private Button cancelButton;

        okButton = new Button();
        okButton.DialogResult = DialogResult.OK;
        okButton.Location = new Point(20, 260);
        okButton.Size = new Size(80, 25);
        okButton.Text = "OK";
        okButton.Click += new EventHandler(okButton_ClickCompany);
        Controls.Add(okButton);

        //same implementation for all other controls you define
    }

あなたの実装は次のようになります

    MyDialog myDialog = new MyDialog(); // you can constructor for using it everywhere
        if (myDialog.ShowDialog() == DialogResult.OK)
        {
             //you code goes here
        }

これはそれを行うための非常に良いアプローチです。必要に応じて拡張し、複数のコンストラクターを定義することでさまざまな方法で使用できます

于 2012-10-25T14:14:41.520 に答える
0

MSDN にすばらしいサンプルがあります http://msdn.microsoft.com/en-us/library/system.threading.threadexceptioneventargs.aspx

于 2012-10-25T14:14:53.133 に答える