我打算提供一个我正在尝试做的简单示例 - 希望这有可能吗?使用事件或..从类执行返回?
我基本上有一个类可以完成整个格式/分析数据。因此,有很多事情可能会出错。我遇到的问题是在出现问题时处理课程。我希望这个类的所有执行都在发生错误后停止。
这个类(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);
}
}
}
调用此“中止”的事件,我会停止这个类的执行(停止循环并没有做任何事情)。我也可以在其他一些父窗体中捕获此事件处理程序。不幸的是,我找不到任何停止这个类的执行的方法。
想法而已:
显而易见的答案是简单地设置一个标志,不断在多个地方一遍又一遍地检查这个标志,但我真的不喜欢这种做法(我目前的执行情况) 。不得不在每一个方法调用之后检查这个(有很多)代码是很难看的。
我想也许是一个后台工作者,或者你可以取消DoWork的执行?
使用表单作为AnalyzingStuff的基类,因此我可以简单地调用“this.Close();”。
您认为这种情况的最佳方法是什么?这些是最好的解决方案吗?是否还有其他优雅的解决方案可以满足我的需求,或者我会完全朝着错误的方向发展?
编辑:我有一系列的try/catch块用于整个代码,用于处理可能发生的不同错误。不幸的是,并非所有人都要求中止发生,所以他们需要立即被抓住。因此,尝试/捕捉不是最理想的方法..或者它是什么?
有效的解决方案。我唯一遇到的问题是我使用了一系列的尝试和捕获来找出可能发生的其他异常。不是所有的我都想要发生ABORT。 – ImGreg 2012-04-12 20:57:45
以另一种方式更新答案,而不使用例外情况。 – 2012-04-13 08:52:50