C#中事件处理的个人体会

 我来答
户如乐9318
2022-10-03 · TA获得超过6633个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:137万
展开全部

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

  在事件通信中 事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件 所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)……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 //定义一个事件 并且关联到一个委托上

lishixinzhi/Article/program/net/201311/13211

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式