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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM