私は何をしようとしているのかの簡単な例を提供するつもりです - うまくいけばそれは可能ですか?イベントまたは..を使用したクラス実行からの復帰?
私は基本的に、データの書式化/解析を一貫して行うクラスを持っています。その結果、これで間違っていることがたくさんあります。私が持っている問題は、状況が悪くなったときにクラスを処理することです。エラーが発生すると、このクラスのすべての実行を停止します。
このクラス(AnalyzingStuff)は、このクラスの実行結果に基づいてさまざまなことを行う親フォームから呼び出されます。
理想的には、「ABORT」という名前のイベントを発生させます。
だからここにこのコードでは、私は次の操作を行います。この「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);
}
}
}
、私はこのクラスの実行を停止する(ループを停止し、他に何もしません)。他の親フォームでこのイベントハンドラをキャッチすることもできます。残念ながら、私はこのクラスの実行を停止する方法を見つけることができません。
アイデアこれまで:
明白な答えは単純にフラグを設定し、常に複数の場所で何度もこのフラグをチェックすることですが、私は本当にこのアプローチを好きではない(私の現在の実装) 。単一のメソッド呼び出しのたびにこれをチェックしなければならないのは、コードが醜いからです。
私はバックグラウンドワーカーやDoWorkの実行を取り消すことができると思っていましたか?
フォームをAnalyzingStuffの基本クラスとして使用して、単にthis.Close();を呼び出すことができます。
この状況にはどのようなアプローチが最適ですか?これらは最高のソリューションですか?私がここで欲しいものに他のエレガントな解決策があるのですか、まったく間違った方向に進んでいますか?
編集:私は、発生する可能性のあるさまざまなエラーを処理するために使用される一連のtry/catchブロックをこのコードで使用しています。残念ながら、それらのすべてが即座に捕らえる必要があるため、中止が発生するとは限りません。したがって、最も理想的なアプローチではなく、試してみてください。そうでしょうか?
有効な解決策。私がそれに関して持っている問題は、起こりうる他の例外を拾うために一連のtryとcatchを使うことだけです。私がABORTを起こすことを望むわけではありません。 – ImGreg
例外を使用しないで別の方法で回答を更新しました。 –