zoukankan      html  css  js  c++  java
  • C#中跨线程读取控件值、设置控件值

      编写应用程序时,涉及到大量数据处理、串口通信、Socket通信等都会用到多线程,多线程中如何跨线程调用主界面或其他界面下的控件是一个问题,利用invoke和delegate可以解决。

      delegate其实就是函数的指针,invoke是控件的唤醒函数。

      情况一: 函数不需要返回值
    //跨线程设置控件comboBox的值
    public delegate void commbdelegate(ComboBox cb);
    public void commb(ComboBox cb)
    {
        if (cb.InvokeRequired)
        {
            commbdelegate dt = new commbdelegate(commb);
            cb.Invoke(dt, new object[]{cb});
        }
        else
        {
        cb.Text = "test";
        }
    }

      情况二:函数需要返回值

    //跨线程读取控件ComboBox的值,并返回
    public delegate string commbdelegate(ComboBox cb);
    public string commb(ComboBox cb)
    {
        if (cb.InvokeRequired)
        {
            commbdelegate dt = new commbdelegate(commb);
            IAsyncResult ia=cb.BeginInvoke(dt, new object[]{cb});
            return (string)cb.EndInvoke(ia);  //这里需要利用EndInvoke来获取返回值
        }
        else
        {
            return cb.Text;
        }
    }
  • 相关阅读:
    Go语言学习笔记(3)
    Haskell语言学习笔记(97)Phantom Type
    Rust语言学习笔记(12)
    堆排序 Rust实现
    Rust 智能指针(Rc)
    Rust 泛型
    Rust 枚举
    Rust 结构体
    Rust 引用
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/wintalen/p/5653688.html
Copyright © 2011-2022 走看看