C#中事件原理

     Windows中的原理如下,其中有三个部分:第一部分,事件源即事件的发生地就是触发事件的控件;第二部分,订阅器即事件的处理程序,用函数实现;第三部分,事件源和事件处理程序间的通信即消息。其中订阅就是编写响应代码,订阅器就是事件处理程序方法。下面程序实现当发生键盘输入事件后,有系统作出响应在屏幕上输出:“message arrived: ”加上输入的字符串。

 


using System;

using System.Timers;

using System.Collections.Generic;

using System.Windows.Forms;

//事件源,触发事件的地方

namespace Test

{

         public delegate void MessageHandle(string msg);

 

         public class Connection

         {

             public event MessageHandle MsgArrived;

             public void Connect()

             {

                 string str;

                 while (true)

                 {

                     str = Console.ReadLine();

                     if (str.Equals("END")) break;

                     MsgArrived(str);

                 }

             }

 

         }

}

//事件的处理程序

namespace Test

{

         public class Display

         {

             public void DisplayMsg(string msg)

             {

                     System.Console.WriteLine("Message arrived : {0}",msg);

             }

         }

}

 

 

//测试代码

namespace Test

{

         static class Test

         {

             static void Main()

             {

                 Connection myconn = new Connection();

                 Display mydis = new Display();

                 myconn.MsgArrived += new MessageHandle(mydis.DisplayMsg);

                 myconn.Connect();

                 System.Console.ReadKey();

             }

         }

}

     这个程序中消息很简单就是string字符串,首先我们先来看事件源部分,这儿我们先定义了一个公有的委托类型,指定了事件处理方法必须遵循的方法的签名,接着定义了一个用于触发事件的Connection类,这个类很简单,只有一个公有的事件和一个connect方法,其中共有的事件MessageHandle就是这个类将要触发的事件,connect方法的功能是死循环一直要求从键盘输入,然后对键盘输入的内容进行判断,当输入的字符串是“END”是结束循环,否则触发事件msgArrived其中消息就是从键盘上得到的字符串。
第二部分,就是事件的处理程序,这部分就是我们在Windows编程中经常要自己编写代码的地方,在这儿定义一个用于显示的Display类,这个类更简单只有一个displayMsg方法注意此方法和前面我们定义的委托类型的签名一致,这个方法就是把我们的到信息简单的在前面加上“Message arrived :”就表示已经处理过了,输出到屏幕上。
最后我们看一下,测试代码,首先实例化了connection和display的实例化对象,接着是很重要的一步,用new实例化一个委托类型MessageHandle的对象,然后把这个对象注册到connection的对象myconn的事件属性MsgArrived上,这样当myconn对象触发了事件后就会自动地执行此事件,即调用委托的代码;而MsgArrived属性是委托类型的实例他必须要和一个方法相联系,在实例化是就是用mydis.DisplayMsg来初始化他的,也就是当调用委托代码,其实调用的是display类的displaymsg方法。
到此,事件也就全部实现了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值