c#委托事件 自己理解

都说C#的委托与事件,对初学者来说很难,但是一跃过去就很简单了

单是我这个一跃不知道还要多久,为什么对有些人来说简单的事,我却那么难,好吧,这个是必须掌握的

需求:发卡器,我要去程序中调用发卡器的方法,得到卡的卡号信息

常人理解:很简单,卡一方,点下读取的事件就可以了

我:想把它做成公用的DLL,使用事件注册来实现读取卡号

1.新建类库 ReaderTest--》类Reader

public Reader(){}-->构造函数(里面又写了连接发卡器的方法)

2.定义委托

public delegate void ReaderEventHandler(CardInfo card);

3.定义事件

public event ReaderEventHandler ReaderEvent;

4.事件触发方法

protected virtual void ReaderCard(CardInfo card)

{   //防止可能存在的多线程同步问题。

ReaderCardHandler tmpEvent = ReaderCardEvent;

if (tmpEvent != null)

{

tmpEvent(e);

}
}

5.信息类

public class CardInfo

{

//a,b属性略

public CardInfo(string a,string b)

{

赋值略

}

}

6.对外的方法界面类调用方法 实现事件数据传输通道口

public void GetCardInfo()

{

//逻辑方法处理处

ulong CardNo;

int CardType;

int nRet = Card_ReadCardNo(&CardNo, &CardType);

if (nRet == 0)

{

string cardno = CardNo.ToString("x8");

string cardtype = CardType.ToString();

 CARDINFO card = new CARDINFO(cardno,cardtype);

                //传递事件方法

ReadCard(card);

}

else

{

Console.WriteLine("无法连接一卡通");

}

}

7。生成dll

8.界面类使用(添加完引用)

先实例化类

在LOAD里注册事件

Reader.ReaderCardEvent += new XZX.ReaderSU.ReaderCard.ReaderCardHandler(ReadCard);

//ReadCard方法实现 与内部委托参数一致

private void ReadCard(XZX.ReaderSU.ReaderCard.CARDINFO e)

{

string cardno = e.CardNo;

string cardtype = e.CardType;

//更新界面元素

this.Invoke(new Action(() =>

{

lblCardNo.Text = cardno;

lblType.Text = cardtype;

lblTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

}));

}

时间: 2024-11-10 08:06:57

c#委托事件 自己理解的相关文章

委托事件的理解

委托是一种带有签名的类,需要用复合这个签名的静态函数或者非静态函数来初始化,就像楚怀王说:"先入秦关者望之".此时还不知道谁会先入秦观,可能是刘邦,可能是项羽.等到时间发展到一定时机,结论出来了,这个事委托给刘邦了.前提是刘邦复合这个签名,先入秦关了. 事件和委托类似,只不过事件源于委托,声明的时候需要先定义一个委托类型.也就是委托和类同级,事件和类里的属性方法同一个级别.事件只能在定义该事件的类里被初始化和使用,除了+=和-=.而委托无此限制.事件更形象化,就像,反秦起义这个事件爆发

对jQuery中on方法委托事件的理解

关于on方法中的委托事件,官方JQ API如下: http://api.jquery.com/on/#on-events-selector-data-handler 参考大牛阮一峰的博文: http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html 什么时候使用委托事件: 1.对未被创建的元素添加事件监听 2.避免频繁添加或删除event handler,委托父元素来进行事件处理 使用委托事件的优点: 1.大量减少监听元素的

使用委托中介租房理解委托与事件

委托和事件,.Net Framework中的应用非常广泛,然而,较好的理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像一道门槛儿,跨过去的,觉得太容易了,而没有过去的人每次见到委托事件就觉得心慌慌,浑身不自在. 我个人还是比较喜欢用面向对象的编程思想去理解逻辑程序,理解编程.下面就用委托中介公司租房子的示例理解使用委托流程: 1.定义委托和委托对象——租房人想要租房,但是没有房源,于是委托中介找房子:2.编写要委托的方法——租房中介有房源,可以找到房子:3.将要委托的方法传递给委托

理解jquery on 委托事件的机制

前两天做了一个点击任意位置,都能关闭菜单的功能,因为菜单里面的每一个a,的点击事件都是用on绑定的.所以在阻止冒泡的时候不管用,今天特意来理解一下on的机制 on 是委托事件,利用的就是冒泡原理 $(selector).on(event,[selector],handler); selector 如果为空,表示的就是目标元素就是所选元素,如果有值代表的是符合所选元素的所有后代元素 实际上,事件委托的事件处理函数是当被委托的元素上的事件触发时判断e.target后执行,而不是目标元素上的事件被触发

理解js事件冒泡事件委托事件捕获

js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <div id="col">    <p>        <a id="btn" href="#">button</a>    </p></div> <script> let b

C#事件的理解以及自定义事件的方法

事件的理解: 在skyline项目的开发中,遇到了一个新的知识:事件. 在程序中,我希望实现一个功能,当视点坐标移动的时候可以实时的得到视点的坐标.这里就需要使用事件这个概念:当坐标发生移动,则触发了一个特定的事件,他可以发出一个信号,而用户可以自定义一个函数(参数必须与事件委托的参数相同,这个后面解释),当他发出一个信号,我就可以执行这个函数. 比方说:甲和乙是朋友,上午见面了,乙和甲说,今天中午吃完饭叫我一声,我带你去网吧玩. 在这个情景中,甲吃饭这件事情是乙没有办法控制的.他只可以等甲吃完

一场武林盟主争霸赛-观察者模式PK委托事件技术

设计模式中提到观察者模式又叫做发布-订阅(Publish-订阅)模式.它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有 观察者对象,使它们能够自动更新自己. C#中提到,委托是对函数的封装,可以当作给方法的特征指定一个名称.而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程.事件其实就是设计模式中观察者模式在.NET中的一种实现方式. 委托就是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的

C#解惑1——委托&amp;事件(转)

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性. 委托和事件在.NET Framework[1]中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易. 中文名 c#委托 外文名 Delegate 编程语言 C# 作    用 方便的引用被委托的方法 应    用 NET Framework 目录 1引言 2参数

关于C#事件的理解

一.一个不错的例子 class FileFFF { public delegate void FileWatchEventHandler(object sender,EventArgs args);//当然事件必须有委托支撑,建立一个委托是必须的 public event FileWatchEventHandler FileWatchEven;//这就是要声明的事件,其实就是委托类型的变量,前面加了一个event关键字 public void OnFileWatchEven(EventArgs