c#自定义事件

目录

一.概述与需求分析

二.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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值