私がやろうとしていることの簡単な例を提供するつもりです-うまくいけばそれは可能ですか?
私は基本的に、データのフォーマット/分析を大量に行うクラスを持っています。結果として、これでうまくいかないことがたくさんあります。私が抱えている問題は、問題が発生したときにクラスを処理することです。エラーが発生したら、このクラスのすべての実行を停止したいと思います。
このクラス(AnalyzingStuff)は、このクラスの実行結果に基づいてさまざまなことを行う親フォームから呼び出されます。
理想的には、「ABORT」という名前のイベントを発生させます。
したがって、このコードでは、次のことを行います。
Class AnalyzingStuff{
public event EventHandler ABORT;
public AnalyzingStuff(){
for(int i = 0; i < 999999; i ++){
AnalyzeSomeStuff();
AnalyzerSomeOtherStuff();
}
MoreStuff();
OtherStuff();
}
private void AnalyzeSomeStuff(){
if(someconditionNotMet){
//EXIT OUT OF THIS CLASS, STOP EXECUTION!!!
this.ABORT.Invoke(this, null);
}
}
}
この「ABORT」イベントを呼び出すと、このクラスの実行を停止します(ループを停止し、他には何もしません)。このイベントハンドラーを他の親形式でキャッチすることもできます。残念ながら、このクラスの実行を停止する方法が見つかりません。
これまでのアイデア:
明白な答えは、単にフラグを設定し、このフラグを複数の場所で何度も何度もチェックすることですが、私はこのアプローチ(私の現在の実装)が本当に好きではありません。すべてのメソッド呼び出し(多数あります)の後にこれをチェックする必要があるのは、コード的には醜いです。
バックグラウンドワーカーか、DoWorkの実行をキャンセルできるものかと思いました。
AnalyzingStuffの基本クラスとしてフォームを使用すると、「this.Close();」を簡単に呼び出すことができます。
この状況への最善のアプローチは何だと思いますか?これらは最良の解決策ですか?私がここで欲しいものに対する他のエレガントな解決策はありますか、それとも私は完全に間違った方向に進んでいますか?
編集:発生する可能性のあるさまざまなエラーを処理するために使用される、このコード全体で使用される一連のtry/catchブロックがあります。残念ながら、それらのすべてが中絶の発生を要求しているわけではないので、すぐに捕まえる必要があります。したがって、試して/キャッチするのは最も理想的なアプローチではありません。