知识大全 C#中事件处理的个人体会

Posted 事件

篇首语:落花踏尽游何处,笑入胡姬酒肆中。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中事件处理的个人体会相关的知识,希望对你有一定的参考价值。

C#中事件处理的个人体会  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  事件是对象发送的消息 以发信号通知操作的发生 操作可能是由用户交互(例如鼠标单击)引起的 也可能是由某些其他的程序逻辑触发的 引发(触发)事件的对象叫做事件发送方 捕获事件并对其作出响应的对象叫做事件接收方

  在事件通信中 事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件 所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)……NET Framework 定义了一个特殊的类型(Delegate) 该类型提供函数指针的功能

  与其他的类不同 委托类具有一个签名 并且它只能对与其签名匹配的方法进行引用 这样 委托就等效于一个类型安全函数指针或一个回调

  C#中使用事件需要的步骤 创建一个委托 将创建的委托与特定事件关联( Net类库中的很多事件都是已经定制好的 所以他们也就有相应的一个委托 在编写关联事件处理程序——也                                  就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有相同的签名)

   编写事件处理程序 利用编写的事件处理程序生成一个委托实例 把这个委托实例添加到产生事件对象的事件列表中去 这个过程又叫订阅事件

  C#中事件产生和实现的流程 定义A为产生事件的实例 a为A产生的一个事件 定义B为接收事件的实例 b为处理事件的方法 A由于用户(程序编写者或程序使用者)或者系统产生一个a事件(例如点击一个Button 产生一个Click事件)

   A通过事件列表中的委托对象将这个事件通知给B B接到一个事件通知(实际是B b利用委托来实现事件的接收)

   调用B b方法完成事件处理

  下面给出《C#入门经典》的例子 并做一定的解释://====================Connection cs===========

  //事件定义 也就是上面提到的A

  //============================================

  using System

  using System Timers

  namespace Ch Ex

  

  /// <summary>

  /// Connection 的摘要说明

  /// </summary>

  ///

  public delegate void MessageHandler(string messageText) //创建一个委托——步骤

  public class Connection

  

  public event MessageHandler MessageArrived //将创建的委托和特定事件关联 在这里特定的事件为MessageArrived ——步骤 */

  /*上面这语句值得注意的地方是 MessageArrived方法被关联到MessageHandler上后 以后消息的传递就通过MessageHandler这个委托来实现 所以如果要能接收这个消息 就必须能支持MessageHandler这个委托 也就是要有一个和委托一样的签名

  private Timer pollTimer

  public Connection()

  

  // // TODO 在此处添加构造函数逻辑// pollTimer=new Timer( ) pollTimer Elapsed+=new ElapsedEventHandler(CheckForMessage)

  public void Connect()

   pollTimer Start()

  public void Disconnect()

   pollTimer Stop()

  public void CheckForMessage(object sender ElapsedEventArgs e)

   Console WriteLine( Check for message ) Random random=new Random() if((random Next( )== )&&(MessageArrived!=null))

   MessageArrived( Hello Mum! ) //程序编写者自己产生一个消息 消息的内容为Hello Mum!

  

  //====================Display cs=========== //接收事件的类 也就是上面提到的B //========================================= using System namespace Ch Ex /// <summary> /// Display 的摘要说明

  /// </summary> public class Display public Display()

   // // TODO 在此处添加构造函数逻辑//

  public void DisplayMessage(string message) //a事件的最终处理函数 即上面的B b 在main函数中 我们会使用本函数实现一个委托实例 并且添加到A的MessageArrived事件列表中——步骤 Console WriteLine( Message Arrived message)

  //====================Class cs================= //一个控制台可执行类 主要是使用上面两个类的实例//============================================== using System

  namespace Ch Ex /// <summary> /// Class 的摘要说明

  /// </summary> class Class /// <summary> /// 应用程序的主入口点

  /// </summary> [STAThread] static void Main(string[] args)

   // // TODO 在此处添加代码以启动应用程序// Connection myConnection=new Connection() Display myDisplay=new Display() myConnection MessageArrived+=new MessageHandler(myDisplay DisplayMessage) //把委托添加到当前A的事件列表中——步骤 和步骤 myConnection Connect()

  Console ReadLine()

  

  

  注 程序代码中事件定义部分 委托定义部分的相关知识可以参看MSDN 值得注意的代码 public delegate void MessageHandler(string messageText) //委托定义

  public event MessageHandler MessageArrived //定义一个事件 并且关联到一个委托上

cha138/Article/program/net/201311/13211

相关参考

知识大全 浅析Java与C#的事件处理机制(二)

浅析Java与C#的事件处理机制(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  \\在程序

知识大全 浅析Java与C#的事件处理机制(一)

浅析Java与C#的事件处理机制(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java与

知识大全 深入解析C#编程中的事件

深入解析C#编程中的事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一个事件是一个使对象或类

知识大全 C#中MouseClick和MouseDoubleClick事件

C#中MouseClick和MouseDoubleClick事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 C#中MouseDown和MouseUp事件

C#中MouseDown和MouseUp事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  .M

知识大全 C#中KeyDown与KeyUp事件

C#中KeyDown与KeyUp事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在键盘按下键

知识大全 c#学习体会:使用 ref 和 out 传递数组

  c#学习体会:使用ref和out传递数组(downmoon)希望与大家分享与所有的out参数一样在使用数组类型的out参数前必须先为其赋值即必须由接受方为其赋值例如public stat

知识大全 C#事件(Event)解析

C#事件(Event)解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  事件(event)这个

知识大全 c#窗体事件

  从网上看到了一个窗体拖动事件超级简洁至少现在这个阶段我是看起来有困难的有兴趣的哥们们可以讨论下usingSystemusingSystemCollectionsGenericusingSystem

知识大全 自定义事件实现不同窗体间的通讯C#篇

自定义事件实现不同窗体间的通讯C#篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#中的事件