C# winform程序 如何终止一个方法的执行 并返回主界面

假如我有这么一个方法voidA(){A1();A2();A3();}其中,A()方法通过点击某按钮触发执行。在执行过程中,A1()方法出现异常,捕获异常后作出处理,弹出提... 假如我有这么一个方法
void A()
{
A1();
A2();
A3();
}

其中,A()方法通过点击某按钮触发执行。
在执行过程中,A1()方法出现异常,捕获异常后作出处理,弹出提示消息提醒用户检查输入。
如何让A2和A3都不再继续执行,并返回主窗体。

假如现在已经在A1()方法中加入了处理异常的语句,并且也成功捕获到异常且弹出了提示框。当关闭提示框后,A()方法并没有终止运行,却依旧义无反顾的执行A2和A3 这是怎么回事。
展开
 我来答
sknix
推荐于2017-09-12 · 超过12用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
如果你的异常处理添加在A1()中,那么异常处理之后仅仅返回到A1()的上层调用函数,也就是A()中。
由于A1()已经处理了异常,所以对于A()这一层而言,并没有异常发生,所以程序会继续,从而A2和A3将继续被执行。
如果你想中止A2和A3,那么你的异常处理必须写在调用它们的函数,也就是A()中。
更多追问追答
追问
我想让指定的方法完成拿来就用的功能 不想再调用方法里面写处理异常的代码 请问我这个想法应该如何来实现?
追答
呵呵 不太明白你的“拿来就用”的意思
如果想在异常发生时跳过A2和A3,直接返回,那么A就必须知道A1中发生了异常,但你又不想在调用方法里写异常处理,那么你可以通过A1的返回值来判定A1中是否发生了异常。
比如A1可以简单声明为
Boolean A1() { /*代码*/ }
那么你只需要在catch中返回false就可以了,而A中相应的改成
A()
{
if(A1())
{
A2();
A3();
}
}
如果有多种异常,只需要扩展一下A1的返回值,比如换成一个枚举值
public enum FailReason
{
Reason1,
Reason2,
// ...
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LastAreas
2011-03-10 · 超过15用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:32.5万
展开全部
你应该将A1的异常抛出,然后让A来处理,例如:
public static void A()
{
try
{
A1();
A2();
}
catch (System.Exception e)
{
Console.WriteLine("A handle the exception!");
return;
}

}

public static void A1()
{
int i = 0;
int y = 1;
int z = 0;
try
{
z = y / i;
}
catch (System.Exception e)
{
throw e;
}

}

public static void A2()
{
Console.WriteLine("Here is method A2!");
}

另外你还可以在A1中抛出自己“描述”的异常,这样就可以在A中根据异常的Message属性来判断到底是A抛出的异常或者是其他地方抛出的异常:
public static void A1()
{
int i = 0;
int y = 1;
int z = 0;
try
{
z = y / i;
}
catch (System.Exception e)
{
throw new System.Exception("Divisor can't be zero!");
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
舞少驾到
2011-03-10 · TA获得超过438个赞
知道小有建树答主
回答量:649
采纳率:0%
帮助的人:369万
展开全部
首先呢可以这样
把A方法中的捕获异常删除
然后调用的时候
try
{
A();
B();
C();
}
catch
{
捕获异常
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落水神
2011-03-10 · TA获得超过883个赞
知道小有建树答主
回答量:217
采纳率:0%
帮助的人:180万
展开全部
try
{
A1();
A2();
A3();
}
catch(exception ex)
{
messagebox.show("请检查输入!");
return ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zingerwu
2011-03-10 · 超过11用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:42.5万
展开全部
采用子线程,在主线程中实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式