私は、「重い」作業を行ういくつかの機能を持つ基本的な Windows フォーム アプリケーションに取り組んでいます。このため、バックグラウンド ワーカーの助けを借りて ThreadAbortExceptions を使用します。
public class AbortableBackgroundWorker : BackgroundWorker
-実行中の機能をキャンセルします。これらの関数を「HeavyFunction()」と呼びましょう
しかし、HeavyFunction() 内で ThreadAbortException がキャッチされたので、HeavyFunction() を呼び出した "MainForm.cs" クラスに戻る必要があります。これは、開いている他の接続 (ライターなど) を正しく閉じて、ユーザーにメッセージを表示するためです。そのため、HeavyFunction() から例外をスローし、それを MainForm でキャッチします (これは HeavyFunction() の内部にあります)。
catch (ThreadAbortException tae)
{
//Deligate abortion upwards.
SomeWriter.DeleteAndClose();
throw new ArgumentException("relevant message or identifier for later use here");
//close and delete
}
スローされた例外は、MainForm 内の "DoWork" 関数でキャッチされ、それに応じて処理されます。
私の質問- これは悪い習慣ですか?
私は Threads と Thread.Abort にあまり慣れていません (したがって、そもそもバックグラウンドワーカーです)
サブ質問- 呼び出されたクラス内からフォームに応答をバブルバックするためのシンプルでエレガントなソリューションは何ですか?