C#使用委托

网上都介绍了一大堆委托了,用简单的方式看待一下,但为何要使用委托呢?

从初级用户的角度看,就是在2个界面中,界面1的进程调用一个方法去更新界面2内的控件,就需要用到委托。否则就可能引发异常:“在该控件上执行的操作正从错误的线程调用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。”

上面说的是可能引发异常,并非一定引发(估计控件界面来不及响应会引发异常),我的测试是简单的控件更新操作不会引起异常。

 

看文章有实例,不错的:

实例1:https://www.cnblogs.com/ZhengDaChuan/p/3765005.html

画个图来帮大家了解下委托:

其实委托,很容易理解,通过图可以体会到,可以把委托看作是一种用来装方法的容器。

实例2:https://blog.csdn.net/rell336/article/details/78345867

 

那么我们可以在界面1(FrmMain.cs)使用委托。

 

1.界面1(FrmMain.cs):

(1).声明委托:

    delegate void DgltPrgListAddSafe(PrgInfoSt prgInfo);

(2).调用:

在界面1(FrmMain.cs)中,调用界面2(FrmMuxStruct.cs)

进程或函数中,frmMuxStruct.PrgListAddSafe(prgInfo);

2.界面2(FrmMuxStruct.cs):

    (1).控件调用委托(tv_muxStruct是控件TreeView):

public void PrgListAddSafe(PrgInfoSt prgInfo)
        {

            //1.ProgListAdd是实现函数

            //2.object内可传递多个参数
            tv_muxStruct.Invoke((DgltPrgListAddSafe)PrgListAdd, new object[] { prgInfo }); 
        }

(2).实现函数:

     private void PrgListAdd(PrgInfoSt prgInfo)
        {
            //1.TreeView信息
            string newPrgText = prgInfo.prgNum.ToString() + "-" + prgInfo.pmtPid.ToString();
            int i = 0;

            if (tv_muxStruct.Nodes.Count == 0)
            {
                tv_muxStruct.Nodes.Add(string.Empty);
                tv_muxStruct.ImageKey = tv_muxStruct.SelectedImageKey = "muxStruct";
            }

  ListViewItem lvi = new ListViewItem();
            lvi.Name = newPrgPmtText;
            lvi.Text = (i + 1).ToString();
            lvi.SubItems.Add("0x" + prgInfo.prgNum.ToString("x4") + "(" + prgInfo.prgNum.ToString() + ")");
            lvi.SubItems.Add(prgInfo.prgName);

....................................................

        lv_prgInfo.Items.Add(lvi);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值