C#事件处理流程

原则:

 

1、C#的事件驱动本质是对以前消息驱动的概念更新与升级

消息驱动模型:发送方发送消息->操作系统维护消息->消息的接收方响应消息

事件驱动模型:发送方引发事件->操作系统维护事件->事件的响应方处理事件

在上面的模型中,发送方和接收方可以是同一个对象或者实例

 

2、C#事件的使用方法举例:

环境描述为:

在一段代码中,一个对象定义了一个事件,另外一个事件处理这个事件;

引发事件是在功能代码中来进行

b对象需订阅这个事件,这个工作是在代码中实现的,通过+=关联事件和事件处理程序

 

3、

》先定义个委托 delegate void fun(int i)

》a对象中定义事件,要用到event关键字和定义好的委托,这样指明事件处理程序是什么样的格式(要什么参数,有什么返回值)

   public event fun eventObj;

   这样对象a就有了个有意义的,实例化的事件

》引发事件,引发事件是一段代码中执行,这段代码可以放在a对象的一个成员函数中,也可以在任意的一段代码中,只要能有效地访问a对象即可

   用代码:eventObj(6); 或者在外部a.eventObj(6);

   引发事件的时候,要带上参数,这些参数就是传递给事件处理程序的参数,所以参数表和委托所指定的草书表需匹配。

》关联事件,把事件和事件处理程序关联起来,这个工作放在功能执行代码中,一个事件可以关联多个事件处理程序,事件发生的时候,所有关联上的事件处理程序均会执行,但是顺序随机不能保证。

   同样地,关联事件这段代码,在任何地方均可,只要代码执行到即可,执行关联语句之后操作系统则会监听这个事件,并在事件引发的时候交给事件处理程序(可能多个)执行。

   a.eventObj += new fun(b.funObj);

也可以,

   B b = new B();

   fun fun1 = new fun(b.funObj);

   a.eventObj += fun1;

一般用第一种的写法,因为实例化一个委托变量并给一个命名并不需要,这个委托变量不需要指向其他事件处理程序的时候,就直接用临时对象关联起来即可,省的命名。

》事件处理程序

这个非常简单,就是一个函数,满足委托规定的签名即可(参数类型,个数,返回值),当事件发生的时候,这个函数就会执行

这在多线程之间相当有用,因为事件处理是操作系统来做的,操作系统负责监听,匹配,调用事件处理程序

所以事件可以用在多线程之间的通信,就像以前的sendmessage一样来做到线程之间通信。

class B

{

void funObj(int i)

{

}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值