zoukankan      html  css  js  c++  java
  • 异常,究竟抛向何处?

    引言
        .Net为我们提供了非常强大的异常处理功能,利用它,我们不仅可以非常方便的进行异常的处理,还可以自己定义并抛出异常,实现信息的特殊反馈。
    应用场景
        MdiForm程序中,Children Form在Load的过程中是不能Close的,即使我们需要这样做。例如:如果Children Form在Load的过程中需要读取需要的数据,但是,读取数据失败了,继续Show已经没有意义。这时我们可以利用异常机制,在读取数据失败后立即抛出异常,Parent Form在捕捉到异常后将Children Form关闭。代码大致如下:
    Parent Form中:

    FrmChild frm=new FrmChild();
    frm.MdiParent
    =this;
    try
    {
        frm.Show();
    }
    catch(Exception ex)
    {
        frm.Close();
        MessageBox.Show(ex.Message);
    }
    finally
    {
        
    //Other
    }

    Children Form中:

    private void FrmChild_Load(object sender, EventArgs e)
    {
        
    //读取数据
        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见谅。

     

  • 相关阅读:
    视图的INSERT、UPDATE、DELETE注意事项
    SQL SERVER 用户管理 TSQL 命令
    SQL SERVER 利用存储过程查看角色和用户信息
    犯错了~
    配置tomcat
    python中的类继承之super
    python中参数解析
    python的几个内联函数:lambda ,zip,filter, map, reduce
    第一次性能测试http_load
    不能在 DropDownList 中选择多个项
  • 原文地址:https://www.cnblogs.com/chinadhf/p/398415.html
Copyright © 2011-2022 走看看