5

バックグラウンド ワーカー スレッドでのイベント処理に苦労しています。

私が遭遇したすべてのドキュメントでは、DoWork イベント ハンドラーが例外をスローした場合、その例外は RunWorkerCompleted ハンドラーで処理する必要があり、その例外は RunWorkerCompletedEventArgs の Error プロパティで使用できると信じています。

これは問題ありませんが、デバッグ時に、例外がユーザー コードによって処理されないというメッセージが常に表示されます。これは、私のアプローチに問題があると私に思わせます。

これを解決するには、どのような手順を踏む必要がありますか?

よろしく、ジョナサン

4

3 に答える 3

2

以前にこの動作を見たことがありますが、DoWork ハンドラーをSystem.Diagnostics.DebuggerNonUserCode次の属性で装飾することで回避しました。

[System.Diagnostics.DebuggerNonUserCode]
void bw_DoWork(object sender, DoWorkEventArgs e)
{ ... }

これは、デバッガーで実行している場合にのみ表示されることに注意してください。属性がなくても、シェルから実行するときと同じです。

これをもう一度調べましたが、これを行う必要がある正当な理由がまだわかりません。私はそれをデバッガーの誤機能と呼んでいます。

于 2009-03-20T00:47:24.107 に答える
1

私は以前にこの問題を抱えていました。e.Error は、デバッグ モードで実行していない場合にのみ設定されます。デバッグで実行すると、実行は例外の場所で停止します。ただし、同じプログラムを非デバッグ モード (VS デバッグ -> デバッグなしで開始または Ctrl+F5) で実行すると、厄介な例外ダイアログが表示されず、e.Error が例外になります。理由はわかりませんが、それが機能する方法です....

于 2009-03-20T00:35:03.327 に答える
0

あなたのアプローチは正しいです。メッセージの続行を押して続行してください。疑わしい場合は、デバッグ セッションの外でテストしてください。

于 2009-03-20T00:32:14.940 に答える