• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#中事件处理的个人体会

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#键盘事件,c#回车事件,c#事件,c#委托和事件,c#checkbox选中事件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
作者: juky_huang 事件的简单解释:

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

在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.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 Ch12Ex02
{
/// <summary>
/// Connection 的摘要说明。
/// </summary>
/// 

public delegate void MessageHandler(string messageText);//创建一个委托---步骤1
public class Connection
{
public event MessageHandler MessageArrived;//将创建的委托和特定事件关联,在这里特定的事件为MessageArrived ---步骤2*/
/*上面这语句值得注意的地方是 MessageArrived方法被关联到MessageHandler上后,以后消息的传递就通过MessageHandler这个委托来实现,所以如果要能接收这个消息,就必须能支持MessageHandler这个委托,也就是要有一个和委托一样的签名 
private Timer pollTimer;
public Connection()
{
//
// TODO: 在此处添加构造函数逻辑
//
pollTimer=new Timer(100);
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(9)==0)&&(MessageArrived!=null))
{
MessageArrived("Hello Mum!");//程序编写者自己产生一个消息,消息的内容为Hello Mum!
}
}
}
}

//====================Display.cs===========
//接收事件的类,也就是上面提到的B
//=========================================
using System;

namespace Ch12Ex02
{
/// <summary>
/// Display 的摘要说明。
/// </summary>
public class Display
{
public Display()
{
//
// TODO: 在此处添加构造函数逻辑
//

}

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

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

namespace Ch12Ex02
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//

Connection myConnection=new Connection();
Display myDisplay=new Display();
myConnection.MessageArrived+=new MessageHandler(myDisplay.DisplayMessage);//把委托添加到当前A的事件列表中----步骤4和步骤5

myConnection.Connect();
Console.ReadLine();
}
}
}

值得注意的代码:
public delegate void MessageHandler(string messageText);//委托定义
public event MessageHandler MessageArrived;//定义一个事件,并且关联到一个委托上
myConnection.MessageArrived+=new MessageHandler(myDisplay.DisplayMessage);//产生一个委托实例,并通过+=运算符号添加到事件列表中 +=运算符号在这里非常的有用 

 
</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#中事件的动态调用实现方法
  • C#中事件处理的个人体会
  • C#中事件处理的个人体会

相关文章

  • 2017-05-28C# 委托(跨窗体操作控件)实例流程讲解
  • 2017-05-28C# Partial:分部方法和分部类代码实例
  • 2017-05-28c# 图片加密解密的实例代码
  • 2017-05-28C#数组中List, Dictionary的相互转换问题
  • 2017-05-2810个C#程序员经常用到的实用代码片段
  • 2017-05-28C#实现DataList里面嵌套DataList的折叠菜单
  • 2017-05-28浅谈Async和Await如何简化异步编程(几个实例让你彻底明白)
  • 2017-05-28详解C# 网络编程系列:实现类似QQ的即时通信程序
  • 2017-05-28C#采用mouse_event函数实现模拟鼠标功能
  • 2017-05-28基于使用递归推算指定位数的斐波那契数列值的解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#byte数组与Image的相互转换实例代码
    • 时间字符串转换成日期对象datetime的方法
    • C#中的yield关键字的使用方法介绍
    • C#使用ADO.Net部件来访问Access数据库的方法
    • DevExpress实现GridControl删除所有行的方法
    • C#控件闪烁的解决方法
    • C#类的访问修饰符用法分析
    • 详解C#正则表达式Regex常用匹配
    • 轻松学习C#的运算符
    • C# 类的声明详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有