zoukankan      html  css  js  c++  java
  • 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;
            }
        }

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

  • 相关阅读:
    通过实验窥探javascript的解析执行顺序
    HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)
    Google Guava之Optional优雅的使用null
    sharding-jdbc源码学习(一)简介
    重构——改善既有代码的设计
    spring自定义标签
    java自定义注解
    开源项目集合
    Lombok引入简化Java代码
    设计模式之建造者模式
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13508641.html
Copyright © 2011-2022 走看看