2

DoWorkハンドラーのハンドラー内で発生する例外を処理したいのですRunWorkerCompletedが、コードがデバッガーで実行されている間、最初に別の例外が発生します。

ここで私が使用しているコードの短い例:

BackgroundWorker _worker;
public void Test()
{
    _worker = new BackgroundWorker();
    _worker.WorkerReportsProgress = false;
    _worker.WorkerSupportsCancellation = false;

    _worker.DoWork += new DoWorkEventHandler(bw_DoWork);
    _worker.RunWorkerCompleted += new
        RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
    _worker.RunWorkerAsync();
}

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    e.Result = ActuallWorkHere();
}

private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    var t = e.Error;
}

private IEnumerable<string> ActuallWorkHere()
{
    throw new Exception("test");
    // "Exeption was unhandled by user code" if called
    string[] res = { "test" };
    return res;
}

私は何を間違っていますか?

4

1 に答える 1

4

これは、デバッガーでコードを実行しているときに Visual Studio が未処理のエラーに対して行うことです。

MSDN のBackgroundWorker.DoWork イベントから:

Visual Studio デバッガーで実行している場合、デバッガーは、未処理の例外が発生した DoWork イベント ハンドラーのポイントで中断します。

コンパイルしたプログラムを実行してみてください。これは表示されません。

この例外は DoWork で処理でき、RunWorkerCompleted ハンドラーのRunWorkerCompletedEventArgs.Errorプロパティは引き続きエラーの詳細を保存することに注意してください。

于 2012-05-04T17:17:25.530 に答える