如何引发一个无声的异常?? DELPHI中有一个Abort的函数,它的作用是引发一个无声的异常。这种异常发生后,只有异常动作,但程序不会出现任何错误对话框。C#有没有这样对应的函数呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try{}catch{//异常后的处理代码}catch里不弹出对话框不行吗? 就是二楼的方法,在catch块中写你要执行的操作就可以了。程序也不会中止 如果是:throw new Exception();程序发布运行后,执行到这句,就会出现一个系统的对话框,说有异常。或者在调试时出现异常未处理的框框,死活也通不过这句。晕,我要的是什么也没有出现,象是catch块什么都不做的话, try{}catch{//嘘~~} 如果是:throw new Exception();程序发布运行后,执行到这句,就会出现一个系统的对话框,说有异常。或者在调试时出现异常未处理的框框,死活也通不过这句。晕,我要的是什么也没有出现,象是return 一样无条件返回。我要的是什么呢?我举个例: private void simpleButton1_Click(object sender, EventArgs e) { test(); MessageBox.Show("已经运行到这里!"); } private void test() { Abort; }当程序执行simpleButton1_Click时,当中的这句:<<MessageBox.Show("已经运行到这里!");>> 是没有执行的,但系统也不能弹出任何的对话框和异常情况显示。有些人说:为什么不写成这样呢?private void simpleButton1_Click(object sender, EventArgs e){ if (test()==true) MessageBox.Show("已经运行到这里!");}private void test(){ return false;}这是因为在实际情况,调用test之前,就已经调用了多个嵌套过程,如果能借用Abort,就可以一次过退出这些嵌套的过程。比使用返回值一个个来判断退出多个嵌套过程要方便得多。不知道有人明白我的意思吗? 其实就是throw new Exception catch中什么都不做,是最寂静的。catch中做点什么,但不什么都不显示是安静的。 想了想,是不是这样:private void simpleButton1_Click(object sender, EventArgs e) { try{ test(); MessageBox.Show("已经运行到这里!"); } catch {} } private void test() { throw new Exception(); } 不行,Application.Exit()是退出整个程序的....但还是终于有人明白了我的意思啰,呵呵....>>>>是想在调用的函数中,中止主调函数的执行。Delphi中使用Abort可能很方便实现这个.C#如果没有它的话,就只能一层层使用返回值判断,来退出主调函数了... 其实不必强求另外一门语言能够实现其他语言的某个函数,只要事务上能够有相同的效果就可以了,各门语言都有自己的设计思路,其实Abort这样的语句不应该滥用,一个好的代码结构不等于简单的代码结构,goto语句是大部分语言都支持但都不推荐的用法。一个事物逻辑应该只有一个入口和一个出口,更何况Abort这样悄悄地在另外一个控制过程中退出当前控制流程,这对于阅读或者调试你代码的其他人会带来一些不便,如果用.net实现这样一个流程的话,我个人觉得一下结构可以考虑private void button1_Click(object sender, EventArgs e) { try { f1(); } catch (Ex1 ex) { Console.WriteLine(ex.Message); } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void f1() { throw new Ex1("this is f1 abort"); } public class Ex1 : Exception { public Ex1(string str) : base(str) { } } 或许你站在过程化的角度认为一个abort要用这么一堆代码实现,但是你站在程序结构的角度考虑的可以有另外一种感受 求助DataGridView中实现数据的增删改查并和数据库中的表同步!!! 未将对象引用设置到对象的实例 ~~加了try还是不行啊…… [求助]获取指定点窗口的PID 广东数据通信网络有限公司怎么样? 如何在 C# 中获取其他进程中调用 DLL 的内存基址 Access某个日期字段,如何设置其默认值为当前日期时间。 System.Data.OleDb.OleDbException: 未指定的错误 请问如何取得操作系统安装所在的路径? c#winForm动态创建文件夹访问被拒绝 虚心请教 DetailsView和SqlDataSource的问题 校对数据库
{
}
catch
{
//异常后的处理代码
}
catch里不弹出对话框不行吗?
程序也不会中止
程序发布运行后,执行到这句,就会出现一个系统的对话框,说有异常。或者在调试时出现异常未处理的框框,死活也通不过这句。晕,我要的是什么也没有出现,象是catch块什么都不做的话,
{
}
catch
{
//嘘~~
}
程序发布运行后,执行到这句,就会出现一个系统的对话框,说有异常。或者在调试时出现异常未处理的框框,死活也通不过这句。晕,我要的是什么也没有出现,象是return 一样无条件返回。
我要的是什么呢?我举个例:
private void simpleButton1_Click(object sender, EventArgs e)
{
test();
MessageBox.Show("已经运行到这里!");
} private void test()
{
Abort;
}当程序执行simpleButton1_Click时,当中的这句:<<MessageBox.Show("已经运行到这里!");>> 是没有执行的,但系统也不能弹出任何的对话框和异常情况显示。有些人说:为什么不写成这样呢?
private void simpleButton1_Click(object sender, EventArgs e)
{
if (test()==true)
MessageBox.Show("已经运行到这里!");
}private void test()
{
return false;
}这是因为在实际情况,调用test之前,就已经调用了多个嵌套过程,如果能借用Abort,就可以一次过退出这些嵌套的过程。比使用返回值一个个来判断退出多个嵌套过程要方便得多。不知道有人明白我的意思吗?
catch中做点什么,但不什么都不显示是安静的。
private void simpleButton1_Click(object sender, EventArgs e)
{
try{
test();
MessageBox.Show("已经运行到这里!");
}
catch
{}
} private void test()
{
throw new Exception();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
f1();
}
catch (Ex1 ex)
{
Console.WriteLine(ex.Message);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void f1()
{
throw new Ex1("this is f1 abort");
} public class Ex1 : Exception
{
public Ex1(string str)
: base(str)
{ }
}