事件的前身是消息(Message)。Windows是消息驱动的操作系统,运行其上的程序也遵照这个机制运行。消息本质就是一条数据,这条数据记载着消息的类别,必要的时候还记载一些消息参数。比如鼠标左键点击窗体时,就会产生一条WM_LBUTTONDOWN消息并加入Windows待处理的消息队列中,当Windows处理到这条消息时就会把消息发送给你点击的窗体,窗体会用自己的一套算法来响应这个消息。
微软把消息机制进行封装推出了易于理解的事件模型,事件模型隐藏了消息机制的很多细节,使得程序开发变得简单。其中的三个关键点有:事件的拥有者、事件的响应者和事件的订阅关系。事件的响应者通过订阅关系直接关联在事件的拥有者的事件上。事件触发时,发送者直接将消息通过事件订阅交给事件响应者,事件响应者使用其事件处理方法对事件的发生做出响应,驱动程序逻辑按客户需求运行;事件简化了程序的开发,但也有不完美之处,如每对消息是“发送—响应”关系,必须建立显示的点对点订阅;事件的宿主必须能够直接访问事件的响应者,不然无法建立订阅关系。
为了降低由事件订阅带来的耦合度和代码量,WPF推出了路由事件机制。路由事件的事件拥有者和响应者之间没有直接显示的订阅关系,事件的拥有者只负责触发事件,事件将由谁响应它并不知道,事件的响应者安装有事件侦听器,当事件传递到事件响应者时就使用事件处理器来响应事件并决定事件是否继续传递。
时间: 2024-10-30 02:49:18