c#之委托(解决线程间操作无效)

之前刚接触winform这东西的时候,需要实现一个数据回显的功能,也就是将执行结果显示在控件上。当时涉及到了多线程的场景,所以,我最初的设想就是线程得到执行结果后,直接调用控件添加一个Item,虽然我是这么想的,但是人家编程语言显然不是这么想的,当场告诉我线程间操作无效,它无效,我笑了... ...

当时果断选择求助于搜索引擎,在一番cv操作之后,功能实现了,今天恰好时间充裕,决定将c#好好重新捋一遍,当时为了尽快完成工作,心浮气躁,草草看了些文档就开始搞起来,如今回想起那个数据回显的功能,用到的技术就是c#中的委托。简单来说,就是既然不允许直接调用某个方法,那么,就使用委托来调用该方法,下面简单记录一下我对这个技术的理解。


 

委托

作用:

就是引用某个方法,我们可以通过委托来调用某个方法。

使用步骤:

  1. 声明
  2. 实例化
  3. 使用

关键字:

delegate
 
示例如下:
class Program
    {
    //声明委托,委托的形参列表和返回值类型必须与所要调用的方法一致
public delegate byte[] dele (int i); static void Main(string[] args) {
       //实例化委托,实例化的参数为该委托调用的方法 dele de
= new dele(IntForMatter.IntToByte);
       //使用委托调用方法
byte[] res = de(85596); foreach (byte r in res) { Console.WriteLine(r); } } }

用于测试委托的代码:

class IntForMatter 
    {
        public static byte[] IntToByte (int parm) 
        {
            byte[] res = new byte[4];
            for (int i = 0; i < 4; i++) 
            {
                res[i] = (byte)(parm >> (i * 8) & 0xff);
            }
            return res;
        }
    }

(请忽略代码中不规范的命名方式... ...)

 

posted @ 2020-08-15 14:26  无心大魔王  阅读(2103)  评论(0编辑  收藏  举报