c#自定义事件
Posted 小哈龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#自定义事件相关的知识,希望对你有一定的参考价值。
目录
一.概述与需求分析
1.VC++自定义事件:
在VC++的mfc可以自定义消息(WM_USER+n)来定义自己的消息,通过SendMessage等发送消息的函数向指定窗口发送消息,然后在被发送的窗口消息处理函数中处理消息(即消息的响应),此处有一个弊端,发送的自定义消息必须是发给窗口的,接收对象只能是窗口
2.QT中自定义事件(信号)
在QT中有自己独立的一套消息事件发送以及响应流程,那就是信号-槽,实现逻辑就是观察者模式,当有一个对象发出一个自己定义的一个信号,这个信号就类似于广播,在程序进程范围内只要对此信号有兴趣的,都可以连接该信号,创建自己的槽函数(处理函数),而且,信号槽机制,是可以跨线程的,这种方式在程序开发中使用很是方便。
3.在c#中实现自定义事件
在上述两种方式的描述中,QT的信号槽机制相对于MFC自定义消息很是便利,那么在C#中是否有类似的用法?本篇下面内容就卡是讨论如何在c#中实现自定义事件。
二.c#中自定义事件实现
1.事件发送者类
//事件发送者
public class DogEvent
//1.声明关于事件的委托;
public delegate void AlarmEventHandler(object sender, EventArgs e);
//2.声明事件;
public static event AlarmEventHandler Alarm;
//变量
public static string str="";
//3.编写引发事件的函数(在程序任意域使用)
public static void OnAlarm(string strT)
if (Alarm != null)
str=strT+"\\n";
//发送信息
Alarm(this, new EventArgs());
2.事件接受者类
假如我需要在一个winform的窗口RichTextBox中实时添加提示信息,将程序的其它流程处理的消息都实时显示在RichTextBox控件中,实现方式如下:
public partical class Form1 : Form
public Form1(DogEvent Dog)
//其他初始化操作
//注册监控事件
DogEvent.Alarm += new DogEvent.AlarmEventHandler(setTextOnEditControl);
//将字符串内容添加到文本显示控件上
public void setTextOnEditControl(object sender,EventArgs e)
richTextBox1.AppendText(DogEvent.str);
3.使用
//在程序的其他地方直接使用
DogEvent.OnAlarm("test字符1");
以上是关于c#自定义事件的主要内容,如果未能解决你的问题,请参考以下文章