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;
            }
        }

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

  • 相关阅读:
    安装mysql警告 warning: mysql-community-server-5.7.19-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    RPM方式安装MySQL5.6
    CentOS7安装MySQL冲突和问题解决小结
    Linux(64) 下 Tomcat + java 环境搭建
    自写Jquery插件 Combobox
    自写Jquery插件 Datagrid
    自写Jquery插件 Menu
    scrapy 中间件
    提高scrapy爬取效率配置
    scrapy基于请求传参实现深度爬取
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13508641.html
Copyright © 2011-2022 走看看