c#之委托(解决线程间操作无效)
之前刚接触winform这东西的时候,需要实现一个数据回显的功能,也就是将执行结果显示在控件上。当时涉及到了多线程的场景,所以,我最初的设想就是线程得到执行结果后,直接调用控件添加一个Item,虽然我是这么想的,但是人家编程语言显然不是这么想的,当场告诉我线程间操作无效,它无效,我笑了... ...
当时果断选择求助于搜索引擎,在一番cv操作之后,功能实现了,今天恰好时间充裕,决定将c#好好重新捋一遍,当时为了尽快完成工作,心浮气躁,草草看了些文档就开始搞起来,如今回想起那个数据回显的功能,用到的技术就是c#中的委托。简单来说,就是既然不允许直接调用某个方法,那么,就使用委托来调用该方法,下面简单记录一下我对这个技术的理解。
委托
作用:
就是引用某个方法,我们可以通过委托来调用某个方法。
使用步骤:
- 声明
- 实例化
- 使用
关键字:
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; } }
(请忽略代码中不规范的命名方式... ...)