私は、BackgroundWorkerオブジェクトを利用して長時間実行される操作を実行する小さなWinFormsアプリを持っています。
バックグラウンド操作は、通常、誰かが再作成されているファイルを開いているときに、時折例外をスローします。
コードがIDEから実行されているかどうかに関係なく、.NETは、未処理の例外が発生したことをユーザーに通知するエラーダイアログをポップアップします。リリース構成を使用してコードをコンパイルしても、これは変更されません。
MSDNによると:
操作でコードが処理しない例外が発生した場合、BackgroundWorkerは例外をキャッチし、RunWorkerCompletedイベントハンドラーに渡します。この例外は、System.ComponentModel..::。RunWorkerCompletedEventArgsのErrorプロパティとして公開されます。Visual Studioデバッガーで実行している場合、デバッガーは、未処理の例外が発生したDoWorkイベントハンドラーのポイントで中断します。
これらの例外がときどきスローされることを期待しており、DoWorkではなくRunWorkerCompletedイベントでそれらを処理したいと思います。私のコードは正しく機能し、エラーはRunWorkerCompletedイベント内で正しく処理されますが、「未処理の例外」の発生を訴える.NETエラーダイアログを停止する方法を私は一生理解できません。
BackgroundWorkerはそのエラーを自動的にキャッチすることになっているのではありませんか?それはMSDNのドキュメントに記載されていることではありませんか?RunWorkerCompletedEventArgsのErrorプロパティに例外をプロポーションさせながら、このエラーが処理されていることを.NETに通知するにはどうすればよいですか?