引言
.Net为我们提供了非常强大的异常处理功能,利用它,我们不仅可以非常方便的进行异常的处理,还可以自己定义并抛出异常,实现信息的特殊反馈。
应用场景
MdiForm程序中,Children Form在Load的过程中是不能Close的,即使我们需要这样做。例如:如果Children Form在Load的过程中需要读取需要的数据,但是,读取数据失败了,继续Show已经没有意义。这时我们可以利用异常机制,在读取数据失败后立即抛出异常,Parent Form在捕捉到异常后将Children Form关闭。代码大致如下:
Parent Form中:
frm.MdiParent=this;
try
{
frm.Show();
}
catch(Exception ex)
{
frm.Close();
MessageBox.Show(ex.Message);
}
finally
{
//Other
}
Children Form中:
{
//读取数据
if(true)//如果读取数据失败
{
throw new ApplicationException("Read Data Exception.");
}
}
做完这些后,单击VS2003的“运行”按钮。Ok,正如我所想象的那样,Parent Form在Children Form抛出异常后立即将其捕获,并在关闭Children Form后显示了我想要的提示信息。
出现问题
正当我在为成功应用了自定义异常而高兴时,问题出现了:我在Windows中直接运行刚才生成的应用程序时,.Net向我提示:应用程序中发生了未处理的异常!不会吧,刚才还正常运行了,怎么现在就变成未处理异常了呢?但事实的确如此。
经过调试,发现.Net在Children Form抛出异常后立即报告了未处理异常的信息,而不是象刚才那样将异常抛到Parent Form中去,即Paren Form中根本没有任何异常发生。
问题就解决到这儿了,我百思不得其解:应用程序在VS2003环境中运行和直接运行编译后的执行文件到底有什么区别呢?在以上应用场景中如果不能用异常机制对Children Form进行关闭,又应该如何处理呢?
致歉:按照园里的规矩,带提问性质的随笔是不应该发到首页的,我之所以发在这儿,一是问题急需解决,二是我觉得这个问题特别怪,希望发到首页和园里的更多博友进行交流。望dudu见谅。