好像是在csdn上看见的一个问题。

如下 现有A() B() C() 。。。。等很多个方法 但是他担心程序按

try
            {
                A();
                B();//如这里抛异常 C()将不执行。
                C();

      //.....
            }
            catch (Exception e)
            {
               
                //
            }

执行时如果遇到某个方法抛出异常,后面的方法不执行了。

他想怎么样呢?1.异常必须要捕获,但不一定要处理。2.某处抛出异常后,后面的方法继续执行。

如何解决:我看完了整个回帖都是用最笨的办法,其实我觉得还有其他办法可以解决。总结下。正好我想把不同声明的方法放在一个委托数组里,看看能不能读出来,分别执行数组里面的方法。

最开始的问题:

把能想到的方法列一遍

第一种方法:利用try{}finally{}

try
         {        
          try
                {
                    A();
                }
                finally
                {
                    try
                    {
                        B();
                    }
                    finally
                    {
                        try
                        {
                            C();
                        }
                        finally
                        {

}
                       
                    }
                }
         }
         catch (Exception e)
         {
                MessageBox.Show(e.Message);     
         }

第二种方法:利用多播委托

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace bfm
{
   
    public partial class Test : Form
    {
        delegate void dg();
        public Test()
        {
            InitializeComponent();
            Begin();
        }

public void Begin()
        {
           
            dg de = A;
            de += B;
            de += C;
            //Delegate 别错写成delegate
            Delegate[] delegateArray = de.GetInvocationList();

foreach (dg d in delegateArray)
            {
                try
                {
                    //d.Invoke();
                    d();
                }
                catch (Exception e)
                {

MessageBox.Show(d.Method.ToString());
                }
            }
        }
        public static void A()
        {
            int a = 0;
            int b = 10 / a;
        }
        public static void B()
        {
            int a = 0;
            int b = 10 / a;
        }
        public static void C()
        {
            int a = 0;
            int b = 10 / a;
        }

}
}

第三种:用多线程 为每个方法开一个线程。

我测试了下 如下

try
            {
                Thread one = new Thread(A);
                one.Start();
            }
            catch (Exception e)
            {

MessageBox.Show(e.Message);
            }

上面这样不能捕获到方法内部的错误  只能捕获线程抛得一些异常。在每个方法里捕获异常?想想也对 既然A B C 这三个方法怀疑有异常抛出。为什么不在方法里面捕获异常呢?

-------------------------------------------------------------------------------------------------------------------------------------

由此想到的问题 如果用多播委托 则每个方法的声明格式都是一样的 (委托的协变和抗变 这里就不说了),那如果方法是

void A(){...}

void B(int size){...}

int C(){.....} 这时多播就有点鞭长莫及了。如何解决呢?

将不同委托类型的委托实例放在Delegate[]数组中后 在不知情的情况下 又怎么使用呢?

转载于:https://www.cnblogs.com/yueliang/archive/2010/04/19/1715714.html

乱想想关于捕获异常后继续执行的实现。相关推荐

  1. 【Flask】在g对象中存放List,实现在捕获异常后继续执行for循环

    目的 在捕获异常后,本层先不处理,但希望能够继续执行for循环,所以也不能继续抛出新的异常 于是使用flask提供的'g'对象,存储所有的异常内容(可以经过自定义数据格式封装,本例使用List存放发生 ...

  2. python使用logging捕获异常后继续执行函数

    使用python的logging模块可以在捕获异常后,记录异常且不退出程序: 例子: import logginglogging.basicConfig(filename='new.log', # 打 ...

  3. appium学习【二】:用try捕获异常后,用例的执行结果为pass

    appium学习[二]:用try捕获异常后,用例的执行结果为pass 参考文章: (1)appium学习[二]:用try捕获异常后,用例的执行结果为pass (2)https://www.cnblog ...

  4. linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc

    安装webpack后,执行webpack -v命令时报错如下: [root@FreeServer ~]# webpack -v /usr/local/node-v4.4.7-linux-x64/lib ...

  5. linux 启动脚本sleep后不执行_JMeter多脚本间的启动延时

    JMeter做压测时,当需要多个jmx脚本依次执行时,需要用到"启动延时",即间隔可设置的时间后启动运行下一个jmx脚本. 实现"启动延时"的方法有2个. 方法 ...

  6. 为什么await()后会执行lock.unlock,await()时不就释放锁了吗

    为什么await()后会执行lock.unlock,await()时不就释放锁了吗 1 是的,释放锁是为了别的线程获得,是为了线程间的通信,是临时释放的,真正满足继续向下执行条件后,被唤醒后获得了锁, ...

  7. $.ajax返回的JSON格式的数据后无法执行success的解决方法

    $.ajax返回的JSON格式的数据后无法执行success的解决方法 参考文章: (1)$.ajax返回的JSON格式的数据后无法执行success的解决方法 (2)https://www.cnbl ...

  8. ajax 载入html后不能执行其中的js解决方法

    事件背景 有一个公用页面需要在多个页面调用,其中涉及到部分js已经写在了公用页面中,通过ajax加载该页面后无法执行其中的js. 解决思路 1. 采用附加一个iframe的方法去执行js,为我等代码洁 ...

  9. 每次执行java命令 都要source_解决每次执行Java等命令时都要重新source /etc/profile后才能执行,否则找不到命令...

    linux mint 我们通常将环境变量设置在/etc/profile这个文件中,这个文件是全局的. /etc/profile:在登录时,操作系 统定制用户环境时使用的第一个文件 ,此文件为系统的每个 ...

最新文章

  1. 在DataGrid(WebControl)中处理DropDownList事件的补充说明
  2. 如何捕获window.print点击打印或取消_原来1:1的CAD图纸要这样打印!学了这么久才知道...
  3. ANDROID L——Material Design综合应用(Demo)
  4. 前端设定项目奖金有多少_【系列二】建筑工程项目激励模式探讨
  5. windows 2008r2文件服务器部分用户访问不了_苹果设备如何访问 Windows 文件共享?...
  6. VX的这一重大变化,你支持嘛?
  7. java对mysql的简单操作——增删改查的总结
  8. Qt总结之九:QMap中嵌套QList
  9. python学来干什么-学 Python 都用来干嘛的?
  10. 【libmodbus-vs2019】测试使用
  11. 学会一招!如何利用 pandas 批量合并 Excel?
  12. Android 在微信支付平台生成签名
  13. Pcie(igb)网卡调试总结:tx uint hang异常解决方法
  14. python获取当前日期_python获取当前的日期和时间
  15. Request对象的一般用法
  16. 总结Criteria的简要使用概述(Hibernate5.2+)
  17. 欢迎来到Jsp编程课时十——Servlect+Jsp基础回顾。
  18. 【PHP】 解决报错:Error: php71w-common conflicts with php-common-5.4.16-43.el7_4.x86_64
  19. 【无标题】USB2514i USB HUB使用经验总结
  20. 灵狐系统不能找到数据库服务器,企业数据总线技术架构说明.docx

热门文章

  1. 未来计算机的功能猜想,全方位猜想,未来计算机发展详细预测
  2. 转成数组_JavaScript之数组扁平化
  3. php xml数据拼接,在PHP中合并XML文件
  4. 如何更改mysql服务名_技术小百科 |【云小课】数据复制服务如何实现对象名映射...
  5. myeclipse怎么导入mysql驱动_myeclipse sql导入数据库驱动包
  6. Java对象的序列化
  7. leetcode283. 移动零 比官方更好的解法。
  8. 深入浅出TCPIP之实战篇—用c++开发一个http服务器(二十一)
  9. 压力测试http_load 通过修改配置测试https协议成功了。
  10. 接入上文,StarWind V2V Image Converter:虚拟机镜像转换工具,如何使用转化之后的 VMware VMDK 文件