c#中事件事件怎么用

  介绍

这篇文章主要为大家展示了“C #中事件事件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C #中事件事件怎么用”这篇文章吧。

事件(事件),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道windows消息处理机制的重要,其实c#事件就是基于windows消息处理机制的,只是封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于事件的应用程序来。

<强>先来看看事件编程有哪些好处。

在以往我们编写这类程序中,往往采用等待机制,为了等待某件事情的发生,需要不断地检测某些判断变量,而引入事件编程后,大大简化了这种过程:

——使用事件,可以很方便地确定程序执行顺序。

——当事件驱动程序等待事件时,它不占用很多资源。事件驱动程序与过程式程序最大的不同就在于,程序不再不停地检查输入设备,而是呆着不动,等待消息的到来,每个输入的消息会被排进队列,等待程序处理它。如果没有消息在等待,则程序会把控制交回给操作系统,以运行其他程序。

——事件简化了编程。操作系统只是简单地将消息传送给对象,由对象的事件驱动程序确定事件的处理方法。操作系统不必知道程序的内部工作机制,只是需要知道如何与对象进行对话,也就是如何传递消息。

有了这么多好处,看来我们的确有必要掌握它。俗话说:“难了不会,会了不难”。就让我们一步一步开始吧…

要讲事件,必然要讲到委托(委托)。它们之间的关系可以通过一个浅显的比方来说明,这个比方可能不是十分恰当。比如你要租一个房屋,这是一个事件,那么委托就是房屋租赁中介,当你把租房子的消息告知中介后,中介就会产生出一套符合你要求的房屋租赁方案来。再由中介执行这套方案,你便租得了这个房屋,即事件被处理了。当然你也可以不通过中介,直接找房东,但如果没有互联网等工具,你如何得到谁出租房屋的信息?话题扯远了。

<强>委托(委托)

委托可以理解成为函数指针,不同的是委托是面向对象,而且是类型安全的。关于委托的理解,可以参考我的另一篇文章《c#委托之个人理解》。

<强>事件(事件)

我们可以把事件编程简单地分成两个部分:事件发生的类(书面上叫事件发生器)和事件接收处理的类。事件发生的类就是说在这个类中触发了一个事件,但这个类并不知道哪个个对象或方法将会加收到并处理它触发的事件。所需要的是在发送方和接收方之间存在一个媒介。这个媒介在。净框架中就是委托(委托)。在事件接收处理的类中,我们需要有一个处理事件的方法。好了,我们就按照这个顺序来实现一个捕获键盘按键的程序,来一步一步说明如何编写事件应用程序。

1,首先创建一个自己的EventArgs类。

引自MSDN:

EventArgs是包含事件数据的类的基类,此类不包含事件数据,在事件引发时不向事件处理程序传递状态信息的事件会使用此类。如果事件处理程序需要状态信息,则应用程序必须从此类派生一个类来保存数据。

因为在我们键盘按键事件中要包含按键信息,所以要派生一个KeyEventArgs类,来保存按键信息,好让后面知道按了哪个键。

internal  class  KeyEventArgs :, EventArgs    {   private  char  keychar;   public  KeyEventArgs (, char  keychar ),:,基地(),   {   时间=this.keychar  keychar;   public  char  Keychar   {   得到   {   return  keychar;   }   }   }

2,再创建一个事件发生的类KeyInputMonitor,这个类用于监控键盘按键的输入并触发一个事件:

internal  class  KeyInputMonitor    {//,才能创建一个委托,返回类型为空白,两个参数   public 才能delegate  void  KeyDownHandler (, object ,发送方,KeyEventArgs  e );//,才能将创建的委托和特定事件关联,在这里特定的事件为KeyDown   public 才能;void 运行(),   {才能   ,,,bool  finished =,假;   ,,,do    ,,,{   ,,,,,Console.WriteLine (,“Input  a  char",);   ,,,,,string  response =, Console.ReadLine ();   ,,,,,char  responsechar =, (, response ==,,,,), ?, & # 39;, & # 39;,:, char.ToUpper(,响应[0]);   ,,,,,开关(,responsechar ),   ,,,,,{   ,,,,,,,case  & # 39; x # 39;:   ,,,,,,,finished =,真的;   ,,,,,,,休息;   ,,,,,,,默认值:   ,,,,,,,//,得到按键信息的参数   ,,,,,,,KeyEventArgs  KeyEventArgs =, new  KeyEventArgs (, responsechar );   ,,,,,,,//,触发事件   ,,,,,,,KeyDown (,, keyEventArgs );   ,,,,,,,休息;   ,,,,,}   ,,,}   ,,,,,! finished ;   ,,}   }

c#中事件事件怎么用