C# 注销掉事件,解决多播委托链表的问题
c#的事件是多播委托。当绑定多个事件时,事件会依次触发,清除掉注册的委托链表:方法1
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
private void ClearAllEvents (object objectHasEvents, string eventName)
{ if (objectHasEvents == null) { return; } try for (int i = 0; i < events.Length; i++) if (ei.Name == eventName) break; |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
//事件
#region 开始查询用户业务编码事件 /// <summary> /// 开始查询用户业务编码事件 /// </summary> public static event EventHandler _BeginSearchUserCodeEvent; public static event EventHandler BeginSearchUserCodeEvent { add { ClearBeginSearchUserCodeEvent(); _BeginSearchUserCodeEvent += value; last_BeginSearchUserCodeEvent.Add(value); } remove { _BeginSearchUserCodeEvent -= value; } } //上一次的BeginSearchUserCodeEvent委托 private static List<EventHandler> last_BeginSearchUserCodeEvent = new List<EventHandler>(); private static void ClearBeginSearchUserCodeEvent() { if (last_BeginSearchUserCodeEvent.Count <= 0) { return; } //注销掉 事件 for (int i = 0; i < last_BeginSearchUserCodeEvent.Count; i++) { _BeginSearchUserCodeEvent -= last_BeginSearchUserCodeEvent[i]; } } #endregion #region 结束查询用户业务编码事件 /// <summary> /// 结束查询用户业务编码事件 /// </summary> public static event EventHandler _EndSearchUserCodeEvent; public static event EventHandler EndSearchUserCodeEvent { add { ClearEndSearchUserCodeEvent(); _EndSearchUserCodeEvent += value; last_EndSearchUserCodeEvent.Add(value); } remove { _EndSearchUserCodeEvent -= value; } } //上一次的EndSearchUserCodeEvent委托 private static List<EventHandler> last_EndSearchUserCodeEvent = new List<EventHandler>(); private static void ClearEndSearchUserCodeEvent() { if (last_EndSearchUserCodeEvent.Count <= 0) { return; } //注销掉 事件 for (int i = 0; i < last_EndSearchUserCodeEvent.Count; i++) { _EndSearchUserCodeEvent -= last_EndSearchUserCodeEvent[i]; } } #endregion |
C# 注销掉事件,解决多播委托链表的问题的更多相关文章
- 【小白学C#】谈谈C#多播委托因异常而终止的解决方案
一.前言 前几天,马三在与朋友闲聊技术的时候,朋友忽然抛出一个问题,把马三难倒了,本着求知的精神,回来以后马三就查阅了相关资料并做了一些实验,终于把问题搞明白了,因此写下本篇博客记录一下.首先,问题是 ...
- 委托+内置委托方法+多播委托+lambda表达式+事件
委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...
- 委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链.本篇的话题包括:委托链是怎样形成的,如何调用委托链方法,以及委托链异常处理. □ 调用返回类型为 ...
- 委托、泛型委托、多播委托、匿名函数、lamda表达式、事件
1.为什么要使用委托 将一个方法作为参数传递给另一个方法 2.委托概念 public delegate int 委托名(int a, int b); 声明一个委托类型,可以用访问修饰符修饰,deleg ...
- C#多播委托和事件的区别与关系
事件是对委托的封装. 如果一个类里,你把一个委托声明为 public 了,那么外部就可以随意改变委托变量的值,包括清空委托变量等,这样的话就违背了面向对象思想的封装特性:但如果声明为 private ...
- ios多播委托
在现实中回调的需求也分两种 一对一的回调. 一对多的回调. 对于一对一的回调,在IOS中使用delegate.block都能实现.而一对多的回调基本就是通知中心了. 假如现在有一个需求,我们以图片下载 ...
- IOS 多播委托(GCDMulticastDelegate)
原文:http://www.cnblogs.com/dagehaoshuang/p/4043264.html 在IOS中为了实现回调一般有如下几个方法: delegate 通知中心 block KVO ...
- jQuery里面的普通绑定事件和on委托事件
以click事件为例: 普通绑定事件:$('.btn1').click(function(){}绑定 on绑定事件:$(document).on('click','.btn2',function(){ ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(4)-Datauard Gap事件解决篇
Oracle dataguard主库删除备库需要的归档时,会导致gap事情的产生,或者备库由于网络或物理故障原因,倒是备库远远落后于主库,都会产生gap事件,本例模拟gap事件的产生以及处理. 1. ...
随机推荐
- 使用jquery生成二维码
二维码已经渗透到生活中的方方面面,不管到哪,我们都可以用扫一扫解决大多数问题.二狗为了准备应对以后项目中会出现的二维码任务,就上网了解了如何使用jquery.qrcode生成二维码.方法简单粗暴,[] ...
- Unity3D基础学习 利用NGUI的Texture播放视频
利用NGUI播放视频,首先你得导入你的视频 你的电脑中必须安装QuickTime软件,没有,去下一个,如果是Windows系统,安装完之后重启. 接下来转换你的视频格式,如果你的视频在QuickTim ...
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
atitit.浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结 1. 缓存的一些机制 1 1.1. http 304 1 1.2. 浏览器刷新的处理机制 1 1.3. Expir ...
- redis 控制调用频率
redis提供了rate limit demo 如下所示: INCR key Available since 1.0.0. Time complexity: O(1) Increments the n ...
- ASP.NET MVC 文件异步上传问题处理
最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我 ...
- 第1章 你真的了解C#吗?
什么是C#? C#是由微软公司开发的一种面向对象且运行于.Net Framework之上的高级程序设计语言,发布于2000年6月. 什么是.Net Framework 我们可以这样去理解.Net Fr ...
- hdu 2203
题意: 子串问题 水题,只要把母串*2,然后比较...... 感觉我好懒....没有自己写函数...... 反正我不是勤快的人......... AC代码: #include <iostream ...
- Linux ulimit 系统资源控制
ulimit 的功能和用法 ulimit 功能简述 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每 ...
- 监听UITabBarItem来拦截是否要跳转
情景是这样的: 我需要在用户点击"我的"的时候, 判断是否已经登录, 如果没有, 就不进入该界面, 而是跳转到用户登录界面, 所以这里我需要进行UITabBarItem点击事件的拦 ...
- ajax+FormData+javascript 实现无刷新表单注册
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...