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;
    }
}
原文地址:https://www.cnblogs.com/wintalen/p/5653688.html