C# (事件触发)回调函数

使用场景 举例:A类中new出B类,B类中有UDP接收,当UDP接收到数据,将数据传回A类

实现原理:

B类:

1. 声明关于事件的委托;

2. 声明事件;

3. 对于事件的触发

A类:

1. 实现接收数据的处理方法

2. 将A类的方法与B类的事件 用 B类的委托绑定

代码如下:

public partial class FormB
{
    public delegate void AlarmEventHandler(string sender);//声明关于事件的委托,参数为要回传的数据类型
    public event AlarmEventHandler Alarm;//声明事件
	
    public void UDP接收数据(string 模拟接收的数据)
    {
        this.Alarm(模拟接收的数据);   //触发事件,发出数据给Alarm所绑定的接收函数
    }
}

public partial class FormA
{
    FormB B1;
    public FormA()
    {
        B1 = new FormB();
        //将FormA类接收处理函数绑定在FormB的Alarm事件上,FormB中所有通过Alarm回传的数据都由FormA的[数据处理]函数进行处理
        B1.Alarm += new FormB.AlarmEventHandler(数据处理);
    }
		
    void 数据处理(string 数据)//用于接收FormB数据进行处理的函数
    {
        Console.WriteLine("消息传回来了");
        Console.WriteLine(数据);
    }
}

测试一下:

private void button1_Click(object sender, EventArgs e)
{
    B1.UDP接收数据("AAA");
}

打印:

可以看出 由FormB的 'UDP接收数据' 函数接收到数据,传给了FormA的 '数据处理' 函数.

第二种方法,将回调方法以参数的方式传入到到函数中(推荐)

父类:

public Form1()
{
	InitializeComponent();
	Form2 f2 = new Form2();
    //将"DataProcessing"方法以参数方式传入到
	f2.addBtn(DataProcessing);
    f2.Show();
}
//回调函数进行数据处理
public void DataProcessing(int a1)
{
	Console.WriteLine(a1);
}

子类:

public Action<int> Alarm;
public Form2()
{
	InitializeComponent();
}

public void addBtn(Action<int> alarm1)
{
	Button btn = new Button();
	int ttt = 2;
	btn.Click += (s, args) =>//设置点击触发回调函数
	{
		//这里写触发回调函数
		alarm1(ttt);   //触发事件,发出数据给Alarm所绑定的接收函数
		//Alarm = alarm1;//或赋予全局,以便在其他函数调用
		//Alarm(ttt);
	};
	this.Controls.Add(btn);
}

效果如下:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值