delegate

使用匿名委托,Lambda简化多线程代码

佐手、 提交于 2020-01-24 14:48:40
.net中的线程也接触不少了。在多线程中最常见的应用莫过于有一个耗时的操作需要放到线程中去操作,而在这个线程中我们需要更新UI,这个时候就要创建一个委托了来更新UI了,不然会报错的。下面我们就来设计一个简单的场景:窗体上有一个按钮和进度条,按钮按下后启动一个线程让进度条滚动。 需要说明一下的是,我们这里不讨论使用匿名委托,lambda的好坏,我们只有一个目标就是使得我们的程序:短点,短点,再短点。 最“朴素”写法 我刚开始没有掌握匿名方法这些就是按照下面这些写的,说实话很痛苦。后来接触了匿名表达式,lambda后几乎都不想再想写这样的东西了,除非特殊的一些情况,比如需要自己定义委托。如果您现在还在按照下面这样写,那么这篇文章对你或许有些帮助! //声明一个委托 delegate void UpdateProgressDelegate(); //声明一个UpdateProgressDelegate的委托实例 private UpdateProgressDelegate UpdateProgressHandle; public Form1() { InitializeComponent(); progressBar1.Maximum = 100; progressBar1.Minimum = 0; progressBar1.Value = 0; /

使用匿名委托,Lambda简化多线程代码

℡╲_俬逩灬. 提交于 2020-01-23 11:43:11
.net中的线程也接触不少了。在多线程中最常见的应用莫过于有一个耗时的操作需要放到线程中去操作,而在这个线程中我们需要更新UI,这个时候就要创建一个委托了来更新UI了,不然会报错的。下面我们就来设计一个简单的场景:窗体上有一个按钮和进度条,按钮按下后启动一个线程让进度条滚动。 需要说明一下的是,我们这里不讨论使用匿名委托,lambda的好坏,我们只有一个目标就是使得我们的程序:短点,短点,再短点。 最“朴素”写法 我刚开始没有掌握匿名方法这些就是按照下面这些写的,说实话很痛苦。后来接触了匿名表达式,lambda后几乎都不想再想写这样的东西了,除非特殊的一些情况,比如需要自己定义委托。如果您现在还在按照下面这样写,那么这篇文章对你或许有些帮助! //声明一个委托 delegate void UpdateProgressDelegate(); //声明一个UpdateProgressDelegate的委托实例 private UpdateProgressDelegate UpdateProgressHandle; public Form1() { InitializeComponent(); progressBar1.Maximum = 100; progressBar1.Minimum = 0; progressBar1.Value = 0; /

jQuery中bind,live,delegate,on绑定事件的方式与区别

独自空忆成欢 提交于 2020-01-23 04:54:25
【转】 jQuery中bind,live,delegate,on绑定事件的方式与区别 jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是unbind、die、undelegate、off。 已知有4个列表元素:   列表元素1   列表元素2   列表元素3   列表元素4   1、bind bind(type,[data],function(eventObject)) bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,参数的含义如下: type:事件类型,如click、change、mouseover等; data:传入监听函数的参数,通过event.data取到。可选; function:监听函数,可传入event对象,这里的event是jQuery封装的event对象,与原生的event对象有区别,使用时需要注意。   源码: bind: function( types, data, fn ) { return this.on( types, null, data, fn ); }   可以看到内部是调用了on方法。   bind的特点就是会把监听器绑定到目标元素上,有一个绑一个,在页面上的元素不会动态添加的时候使用它没什么问题。但如果列表中动态增加一个“列表元素5”

Openwrt iptables分析

柔情痞子 提交于 2020-01-21 08:43:43
这里将载有Openwrt的WR841N的路由表dump出来分析一下。 这个是dump出iptables的命令 root@OpenWrt:/etc/config# iptables-save 这里分为4部分: 1.NAT表 *nat :PREROUTING ACCEPT [37930:3638072] :INPUT ACCEPT [440:34479] :OUTPUT ACCEPT [1004:101848] :POSTROUTING ACCEPT [149:36868] :MINIUPNPD - [0:0] :delegate_postrouting - [0:0] :delegate_prerouting - [0:0] :postrouting_lan_rule - [0:0] :postrouting_rule - [0:0] :postrouting_wan_rule - [0:0] :prerouting_lan_rule - [0:0] :prerouting_rule - [0:0] :prerouting_wan_rule - [0:0] :zone_lan_postrouting - [0:0] :zone_lan_prerouting - [0:0] :zone_wan_postrouting - [0:0] :zone_wan_prerouting - [0

C#的委托案例

笑着哭i 提交于 2020-01-17 09:07:22
C#实现(Delegate)的委托就不多说了,直接上代码,看代码中的注释: namespace Delegate { delegate void DGSayiHi(string name);//声明委托 delegate void DGDo(string name); class Program { static void Main(string[] args) { DGSayiHi sayhi = new DGSayiHi(SayChineseHi); DGSayiHi sayhi2 = new DGSayiHi(SayEnglishHi); sayhi += sayhi2;//实际上+=相当于Delegate.Combine, -=相当于Delegate.Remove sayhi("春晓"); Console.ReadLine(); } static void SayChineseHi(string name) { Console.WriteLine("你好:" + name); } static void SayEnglishHi(string name) { Console.WriteLine("Hello:" + name); } } } 来源: https://www.cnblogs.com/wml-it/p/12204098.html

jQuery绑定事件的四种方式

匆匆过客 提交于 2020-01-16 04:32:57
jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码。下面我们来看下jQuery中绑定事件的方式都有哪些。 jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是unbind、die、undelegate、off。在开始看他们之前 一:bind(type,[data],function(eventObject)) bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,参数的含义如下: type:事件类型,如click、change、mouseover等; data:传入监听函数的参数,通过event.data取到。可选; function:监听函数,可传入event对象,这里的event是jQuery封装的event对象,与原生的event对象有区别,使用时需要注意 bind的源码: 1 2 3 4 5 6 7 bind: function ( types, data, fn ) { return this .on( types, null , data, fn ); } $( '#myol li' ).bind( 'click' ,getHtml); bind的特点就是会把监听器绑定到目标元素上

jQuery绑定事件的四种方式

こ雲淡風輕ζ 提交于 2020-01-15 08:55:25
jQuery绑定事件的四种方式 jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码。下面我们来看下jQuery中绑定事件的方式都有哪些。 jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是unbind、die、undelegate、off。在开始看他们之前 一:bind(type,[data],function(eventObject)) bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,参数的含义如下: type:事件类型,如click、change、mouseover等; data:传入监听函数的参数,通过event.data取到。可选; function:监听函数,可传入event对象,这里的event是jQuery封装的event对象,与原生的event对象有区别,使用时需要注意 bind的源码: 1 2 3 4 5 6 7 bind: function ( types, data, fn ) { return this .on( types, null , data, fn ); } $( '#myol li' ).bind( 'click' ,getHtml);

委托基础

夙愿已清 提交于 2020-01-14 17:59:19
1. 之前看了很多关于委托,事件方面知识,但一直没有独自使用(接触时间较短,且项目中只是调试并没有去开发)年前有段轻松时间,来总结相关知识主要是参考了两位大侠 博客:http://www.tracefact.net/tech/009.html ;https://www.cnblogs.com/yinqixin/p/5056307.html 这两篇博主直接举出例子,说出使用委托好处,这样可避免if else swich 等语句过与复杂,容易出现混论以及后期围护出现问题。 2. 委托 委托从数据结构说,是一个类,使用户自己定义类型,从设计模式角度说委托提供了方法的抽象。委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法 的地址。调用委托的时候,委托包含的所有方法将被执行。 委托声明: (1) 以deleagate关键字开头。 (2)返回类型+委托类型名+参数列表。 public/ private delegate void MyDel(int x); 声明委托变量: MyDel del1,del2; //和其他类型变量声明一致。 初始化委托变量: (1)new运算符的操作数的组成如下: 委托类型名; 一组圆括号,其中包含作为调用列表中的第一个成员的方法的名字。方法可以是实例方法或静态方法。 del1 = new MyDel( myInstObj.MyM1 ); del2

C#/.NET 当我们在写事件 += 和 -= 的时候,方法是如何转换成事件处理器的

筅森魡賤 提交于 2020-01-12 08:50:37
当我们在写 += 和 -= 事件的时候,我们会在 += 或 -= 的右边写上事件处理函数。我们可以写很多种不同的事件处理函数的形式,那么这些形式都是一样的吗?如果你不注意,可能出现内存泄漏问题。 本文将讲解事件处理函数的不同形式,理解了这些可以避免编写代码的时候出现内存相关的问题。 本文内容 典型的事件处理函数 变种事件处理函数 编译器类型转换 不是同一个委托实例 `+=` `-=` 是怎么做的 `-=` 典型的事件处理函数 事件处理函数本质上是一个委托,比如 FileSystemWatcher 的 Changed 事件是这样定义的: // 这是简化的代码。 public event FileSystemEventHandler Changed ; 这里的 FileSystemEventHandler 是一个委托类型: public delegate void FileSystemEventHandler ( object sender , FileSystemEventArgs e ) ; 一个典型的事件的 += 会像下面这样: void Subscribe ( FileSystemWatcher watcher ) { watcher . Changed + = new FileSystemEventHandler ( OnChanged ) ; } void

jQuery-01:on live bind delegate

北战南征 提交于 2020-01-11 15:29:45
摘自: https://www.cnblogs.com/moonreplace/archive/2012/10/09/2717136.html moonreplace 这位大牛的 当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的。而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: DOM树 下图仅仅是一个示例,这是一个在browser环境下的一棵模拟DOM树,在下面的代码中仅起到演示的作用: Event bubbling (aka event propagation)冒泡 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置stopPropagation(Moder Browser), cancelBubble(IE),那么它的所有父元素,祖宗元素都会受之影响,它们上面绑定的事件也会产生作用。看一个示例: $('a').bind('click', function() { alert("That tickles!") }); 当我们在a 上面点击的时候,首先会触发它本身所绑定的click事件,然后会一路往上,触发它的父元素,祖先元素上所有绑定的click事件,就像下图演示的那样。 示例HTML 为了对下面的代码进行演示