4
次のコードを使用して、プログラム内のすべての未処理の例外を処理しています。しかし、例外が指定されたメソッドに伝播しないという問題。未処理の例外がC#で捕捉されない
[STAThread]
static void Main()
{
AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Handler for unhandled exceptions.
currentDomain.UnhandledException += GlobalUnhandledExceptionHandler;
// Handler for exceptions in threads behind forms.
System.Windows.Forms.Application.ThreadException += GlobalThreadExceptionHandler;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.Message,
"Important",
MessageBoxButtons.YesNo);
}
private static void GlobalThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Exception ex = e.Exception;
MessageBox.Show(ex.Message,
"Important",
MessageBoxButtons.YesNo);
}
FormMainにはbackgroundWorkerオブジェクトがあります。このバックグラウンドワーカーは、アプリの大半を占めるもので、doWorkメソッドに例外があると、予期したとおりに伝播されません。 これは、私がメインフォームで使用しているバックグラウンドワーカーのコードです。
private void button_startSync_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(getSettings());\
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// ... processing code
// Unhandled Exception will generated in this method...
}
私がここで間違って何をやってお知らせくださいERRO /例外が固定のために戻って報告するように、私は...、私のプログラムの任意の場所で発生した例外は上記のものをグローバルハンドラに巻き込まれたく
感謝、
私はあなたがWorkedCompletedでこれを行うことを意味すると思います。 DoWorkEventArgsにはErrorプロパティがありません。 – Ahmed
私は、間違ったコードをコピー/貼り付けました。ありがとう。 –