• 事件或委托获取多个返回值和异常处理


    理论知识:

    1.  委托在编译后会生成一个继承自MulticastDelegate的类,而这个MulticastDelegate又继承自Delegate。在Delegate内部,维护了一个委托链表,链表上的每一个元素为一个只包含一个目标方法的委托对象。而通过Delegate基类的GetInvocationList()静态方法,可以获得这个委托链表。随后便利这个链表,通过链表中的每一个委托对象来调用方法,这样就可以分别获得每一个方法的返回值

    2.  Delegate基类中的DynamicInvoke()方法:

    public object DynamicInvoke(params object[] args)
    

      这是调用委托最通用的方法了,适用于所有类型的委托。它接受的参数为 params object[] ,也就是说它可以将任意类型作为参数,并返回单个object对象。

    如下是一个通用的调用委托链表中方法的方法:

     1             private static List<object> FireEvent(Delegate del, params object[] args)
     2             {
     3                 List<object> objLst = new List<object>();
     4                 if (del != null)
     5                 {
     6                     Delegate[] delegates = del.GetInvocationList();
     7                     foreach (Delegate method in delegates)
     8                     {
     9                         try
    10                         {
    11                             object obj = method.DynamicInvoke(args);
    12                             if (obj != null)
    13                             {
    14                                 objLst.Add(obj);
    15                             }
    16                         }
    17                         catch (Exception e)
    18                         {
    19 
    20                         }
    21 
    22                     }
    23                 }
    24 
    25                 return objLst;
    26             }
  • 相关阅读:
    linux expr命令执行问题
    Virtual Box设置Host only模式的网络互通问题
    Linux下管理软件的方法
    转载 AMI方案和Insyde方案
    笔记二(名词详解)持续更新。。。
    笔记一(固件、BIOS、UEFI)
    Cache As Ram
    (二十四)C语言之文件
    (二十三)C语言之位运算
    (二十二)C语言之typedef
  • 原文地址:https://www.cnblogs.com/gscvery/p/4390496.html
Copyright © 2020-2023  润新知