停止执行子方法中的所有方法

本文关键字:有方法 子方法 执行 | 更新日期: 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()可能会抛出一个ArgumentOutOfRangeExceptionArgumentNullException, 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, BC中的任何方法抛出了您意想不到的异常,它将由最后的catch块处理。

如果你真的必须有一个只能在顶层处理的异常,创建你自己的exception类可能是一个好主意:

 class MyApplicationException : Exception { }

那么,只要你使用catch (Exception)以外的任何地方,你会很好。