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

理论知识:

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             }
时间: 2024-10-15 17:40:42

事件或委托获取多个返回值和异常处理的相关文章

python asyncio 获取协程返回值和使用callback

Reference from: https://www.cnblogs.com/callyblog/p/11216961.html 1. 获取协程返回值,实质就是future中的task import asyncioimport timeasync def get_html(url): print("start get url") await asyncio.sleep(2) return "bobby" def callback(url, future): pri

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器执行该存储过程,在显示栏中如果有影响的行数,则影响几行count就是几(2)如果通过查询分析器执行该存储过程,在显示栏中如果显示'命令已成功完成.'则count = -1;在显示栏中如果有查询结果,则count = -1总结:A.ExecuteNonQuery()该方法只返回影响的行数,如果没有影响

[android] 开启新的activity获取他的返回值

应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面 短信发送时,可以直接选择系统联系人 界面布局是一个线性布局,里面右侧选择联系人在EditText的右上,因此使用相对布局对输入框进行包裹,按钮使用android:layout_alignParentRight=”true”处理 下面的内容有多行,使用 属性android:inputType=”textMultiLine” 属性android:minLines=”5” 我们使用hvg的屏幕进行预览 打开一

shell获取函数的返回值

背景:定义了一个函数,比对本地和线上服务器集群数量差别,想要获取不同集群的个数.shell和其他语言的函数返回值还是差别挺大的. 定义一个函数 functionname(){ 操作内容 echo 输出内容 return 返回值 #返回值可有可不有 } 获得函数的返回值 1.函数默认是将标准输出传递出来,不是返回值. 所以如果直接调用functionname,实际上是将输出传递回来 例如: a=`functionname` 将函数functionname的标准输出传递给a 2.调用函数不需要加()

数据库操作--获取存储过程的返回值

用SQL Server数据库写了个存储过程,代码如下 <span style="font-family:KaiTi_GB2312;font-size:18px;">create procedure proc_select @id int as begin if exists(select * from news where [email protected]) return 1 else return 2 end </span> 在C#中通过执行存储过程来获取返

WebService,ASMX文件使用XML格式数据传递参数、验证与获取XML格式返回值的一种方式

1:首先WebService方法定义,每个方法定义两个参数,一个用于验证权限,string格式的XML文本用于传输数据.最终目的实现,WebService方法,验证权限,获取XML数据,处理之后返回XML数据.一下面一段代码为例进行说明: [WebMethodAttribute(Description = "新增督学计划")] public string InspectorPlan_Add(string Token, string XMLParas) { try { //安全凭证检查

如何在函数外部获取ajax的返回值?

问题:今天在开发的过程中,遇到一个小问题,就是在将ajax获取数据部分的代码封装在函数内,将ajax获取的值作为函数的返回值. 抱着爱钻研的精神,最终得到了解决方案,在这里整理出来方便以后查阅. 尝试1:同步调用,直接在ajax函数中return值 function getAjax(){ var result = 1; $.ajax({ url : 'test.php', type : "post", data : {}, async : false, success : functi

js 获取getElementsTagName()方法返回值的内容

<div id="news-top" class="section"> <h3>Some title</h3> <div class="content"> <ul> <li><span>HTML</span><a href="">Some Link1</a></li> <li><