• CLR事件模型


    CLR事件模型通俗说就是直接事件模型。事件的前身就是消息(Message),Windows是消息驱动的操作系统,运行其上的程序也遵照这个机制运行。消息本身就是一条数据,这条数据里记载着消息的类别,必要的时候还记载一些消息参数。比如,当你的窗体上按下鼠标左键的时候,一条名为WM_LBUTTONDOWN消息就被生成并加入到Windows待处理的消息队列中,并等待被处理。当Windows处理到这条消息时会把消息发送给你单击的窗体,窗体会用自己的一套算法来响应这个消息,这个算法就是Windwos API开发中的消息处理函数。消息处理函数中有一个多级嵌套的switch结构,进入这个switch机构的消息会被分门别类并流入某个分支,在这个分支里会有一个由程序员编写的函数被调用。例如对WM_LBUTTONDOWN这个消息,程序员可能会编写一个函数来查看它所携带的参数(即鼠标单击出的X,Y坐标),然后决定是把它们显示出来还是在这个点上绘制图像等。也由的消息是不带参数的,比如按钮被单击的消息,当流入某个分支后程序员就知道是按钮被单击了。

    然而对于消息驱动机制,仍然有很多复杂的地方,在.net框架中将消息驱动进一步封装成了更容易让人理解的事件模型。在事件驱动机制中将消息驱动简化为三个关键点:

    1、事件的拥有者:即消息的发送者。事件的宿主可以在某些条件下激发事件

    2、事件的响应者:即消息的接收者,处理者。事件接收者使用其事件处理器对事件作出响应

    3、事件的订阅关系:事件的拥有者可以随时激发事件,但是事件发生后会不会得到响应要看有没有事件的响应者,或者是说这个事件有没有被关注。如果对象A关注对象B的某个事件是否发生,则称A订阅了B的事件,更进一步讲,事件实际上是一个使用Event关键字修饰的委托类型成员变量,事件处理器则是一个函数,说A订阅了B的事件,本质上是让B.Event与A.EventHandler关联起来。所谓事件激发就是B.Event被调用,这时,与其关联的A.EventHandler就会被调用

    举个简单的例子,在窗体上放置一个button按钮,创建button的Click事件处理器,对于这个事件模型的几个关键部分:

    事件拥有者:button按钮

    事件:button.Click

    事件的响应者:窗体本身

    事件处理器:this.button_Click方法

    订阅关系:this.button.Click+=new system.EventHandler(this.button_Click );

  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/zcftech/p/2939321.html
Copyright © 2020-2023  润新知