停止执行子方法中的所有方法
本文关键字:有方法 子方法 执行 | 更新日期: 2023-09-27 18:02:34
我正在处理一些从其他方法中调用的方法,但如果从父类调用的方法中发生事件,则需要停止处理这两个方法。我在代码中所做的一个例子是:
private void parentMethod()
{
//Do work here
childMethod();
//Do more work here
}
private void childMethod()
{
//Do work (not child labor)
using (var form = new choice(myList))
{
var result = form.ShowDialog();
if (result == DialogResult.OK)
{
int val = form.listIndex;//values preserved after close
//Do something here with these values
string server = myList2[val - 1];
MyList.Clear();
MyList.Add(server);
}
else
{
Exception e = new Exception("Dialog force closed.",null);
throw e;
}
}
正如你在这里看到的,我尝试创建一个异常来抛出;然而,因为有许多其他方法从父方法调用,也可以抛出异常,但可以允许其余的代码执行,在这个例子中的父方法是从需要停止的另一个方法调用,你如何停止从子方法中多个方法的执行,除了做Application.Close()
?
您需要在异常捕获中更具体。一般来说,除了最顶层之外,裸catch
是不好的做法,catch (Exception e)
或类似的情况也是如此。您应该确定方法可以抛出哪些异常,然后只有才能捕获这些异常。然后,其他异常将被传递回调用堆栈。
例如,如果您的方法A()
可能会抛出一个InvalidOperationException
, B()
可能会抛出一个ArgumentOutOfRangeException
或ArgumentNullException
, C()
可能会抛出一个AccessViolationException
,那么您的代码应该看起来像
public int Main()
{
try
{
try
{
A()
}
catch(InvalidOperationException e)
{
//handle
}
try
{
B()
}
catch(ArgumentOutOfRangeException e)
{
//handle
}
catch(ArgumentNullException e)
{
//handle
}
try
{
C()
}
catch(AccessViolationException e)
{
//handle
}
}
catch (Exception e)
{
//handle all other exceptions
}
}
现在,如果A
, B
和C
中的任何方法抛出了您意想不到的异常,它将由最后的catch
块处理。
如果你真的必须有一个只能在顶层处理的异常,创建你自己的exception类可能是一个好主意:
class MyApplicationException : Exception { }
那么,只要你不使用catch (Exception)
以外的任何地方,你会很好。