C# 委托使用场景

本文探讨了在多个父窗口打开同一子窗口并接收子窗口返回数据的场景下,使用委托进行窗口间通信的解决方案。通过示例展示了如何在父窗口注册子窗口的委托事件,实现在未知数量的父窗口间高效、灵活的数据反馈。

A1窗口打开B窗口,B窗口向A1窗口传值时使用到委托。只有A1打开B窗口时,可以直接在B调用A1中的(public)方法,这看不出委托的作用(前提是知道B窗口是A1窗口打开的)。

当有窗口A2也打开B窗口,同时需要B窗口返回值时,如果也在B中直接调用A2的(public)方法,就需要在B中判断是A1还是A2调用它,然后调用对应的窗口的方法来实现返回数据(前提是知道B窗口只被A1、A2调用)。

当打开B窗口的有n(未知)个时,显然直接调用父窗口的(public)方法这种做法已经不能实现数据反馈功能了。

场景例如:B是下载窗口,点击B窗口内按钮开始下载任务,下载完成后再向父窗口(A1、A2……)反馈数据。

委托代码例:

// 父窗口(A1):
public class A1 {
    public A1()
    {
        B b = new B();
        b.FeedBackEvent += new B.FeedBackHandler(DownLoad);
    }

    private void DownLoad(string msg)
    {
        // B窗口任务已完成,这里写其他动作
    }
}



// 子窗口(B):
public class B {
    public delegate void FeedBackHandler(string message);
    public event FeedBackHandler FeedBackEvent;
    
    //点击子窗口的下载按钮,下载东西
    private void button1_Click(object sender, EventArgs e)
    {
        // 这里写任务实现代码
        string message = "下载完成";
        this.FeedBackEvent?.Invoke(message);
    }
}

这时,需要打开B窗口且需要返回数据的父窗口,可以通过注册B的委托(FeedBackEvent)来实现,且B窗口不用去关注是谁调用了自己

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值