C#中的事件驱动机制如何理解 (c#中的事件是什么原理)
本文目录导航:
C#中的事件驱动机制如何理解
事件驱动机制跟消息驱动机制相比事件:按下鼠标,按下键盘,按下游戏手柄,将U盘插入USB接口,都将产生事件。
比如说按下鼠标左键,将产生鼠标左键被按下的事件。
消息:当鼠标被按下,产生了鼠标按下事件,windows侦测到这一事件的发生,随即发出鼠标被按下的消息到消息队列中,这消息附带了一系列相关的事件信息,比如鼠标哪个键被按了,在哪个窗口被按的,按下点的坐标是多少?如此等等。
1.要理解事件驱动和程序,就需要与非事件驱动的程序进行比较。
实际上,现代的程序大多是事件驱动的,比如多线程的程序,肯定是事件驱动的。
早期则存在许多非事件驱动的程序,这样的程序,在需要等待某个条件触发时,会不断地检查这个条件,直到条件满足,这是很浪费cpu时间的。
而事件驱动的程序,则有机会释放cpu从而进入睡眠态(注意是有机会,当然程序也可自行决定不释放cpu),当事件触发时被操作系统唤醒,这样就能更加有效地使用cpu.2.再说什么是事件驱动的程序。
一个典型的事件驱动的程序,就是一个死循环,并以一个线程的形式存在,这个死循环包括两个部分,第一个部分是按照一定的条件接收并选择一个要处理的事件,第二个部分就是事件的处理过程。
程序的执行过程就是选择事件和处理事件,而当没有任何事件触发时,程序会因查询事件队列失败而进入睡眠状态,从而释放cpu。
3.事件驱动的程序,必定会直接或者间接拥有一个事件队列,用于存储未能及时处理的事件。
4.事件驱动的程序的行为,完全受外部输入的事件控制,所以,事件驱动的系统中,存在大量这种程序,并以事件作为主要的通信方式。
5.事件驱动的程序,还有一个最大的好处,就是可以按照一定的顺序处理队列中的事件,而这个顺序则是由事件的触发顺序决定的,这一特性往往被用于保证某些过程的原子化。
6.目前windows,linux,nucleus,vxworks都是事件驱动的,只有一些单片机可能是非事件驱动的。
事件模式耦合高,同模块内好用;消息模式耦合低,跨模块好用。
事件模式集成其它语言比较繁琐,消息模式集成其他语言比较轻松。
事件是侵入式设计,霸占你的主循环;消息是非侵入式设计,将主循环该怎样设计的自由留给用户。
如果你在设计一个东西举棋不定,那么你可以参考win32的GetMessage,本身就是一个藕合度极低的接口,又足够自由,接口任何语言都很方便,具体应用场景再在其基础上封装成事件并不是难事,接口耦合较低,即便哪天事件框架调整,修改外层即可,不会伤经动骨。
而如果直接实现成事件,那就完全反过来了。

什么是事件驱动编程机制
1、事件驱动编程机制与传统的非事件驱动编程机制存在显著差异。
在现代程序设计中,事件驱动方法占据了主导地位,尤其是在多线程程序中。
与之相对的,早期的程序往往采用轮询机制,即程序会持续检查是否满足特定条件。
这种方法会占用CPU资源,因为它需要不断地进行条件检查。
相反,事件驱动程序在等待事件时可以释放CPU资源,并在事件发生时由操作系统唤醒,这样能够更高效地利用CPU。
2、在事件驱动编程中,程序通常包含一个循环,该循环在一个线程中运行。
这个循环主要负责两个任务:首先是检测并选择一个待处理的事件,其次是执行事件的处理函数。
程序的执行流程就是不断选择和处理事件。
当没有事件发生时,程序会在查询事件队列时进入休眠状态,从而让出CPU给其他任务。
3、事件驱动程序通常会维护一个事件队列,用以存储那些未能立即处理的事件。
4、由于事件驱动程序的行为完全由外部事件触发,因此在这样的系统中,事件成为主要的通信方式。
系统中往往存在大量这样的程序,它们通过事件相互通信。
5、事件驱动编程的一个显著优势是能够按照事件触发的顺序处理队列中的事件。
这种特性经常用于确保某些操作的原子性,即它们要么全部完成,要么全部不发生。
什么是事件驱动编程机制
要理解事件驱动和程序,需与非事件驱动程序进行对比。
现今多数程序为事件驱动,如多线程程序。
早期则有许多非事件驱动的程序,这类程序在需等待某个条件触发时,会不断检查该条件,直至满足。
相比之下,事件驱动的程序在无需处理时,有机会释放CPU进入睡眠态,待事件触发时被操作系统唤醒,从而更高效地利用CPU资源。
事件驱动程序的典型形态为一个包含两个部分的死循环,以线程形式存在。
第一部分是接收并筛选需要处理的事件,第二部分是处理事件的过程。
程序的执行即为选择并处理事件,无事件触发时,程序会进入睡眠状态释放CPU。
事件驱动的程序直接或间接拥有一个事件队列,用于存储未及时处理的事件。
程序的执行行为完全由外部输入的事件控制,因此,在事件驱动的系统中,存在大量此类程序,它们以事件作为主要的通信方式。
事件驱动的程序还有一大优势,即能按事件的触发顺序处理队列中的事件。
这一特性常用于保证某些过程的原子性,确保程序执行的完整性和正确性。
总结而言,事件驱动的程序通过有效利用CPU资源、灵活处理外部事件以及保证过程原子化等特性,在现代计算环境中展现出强大的优势。