在Winform程式中,經常會有需要改變畫面上各個控制項屬性的時候,

而應用程式經常會用到多執行緒的方式處理各種資料,這時很有可能會出現跨執行緒存取

控制項的情形,此時會出現錯誤訊息,如:存取控制項 'label1' 時所使用的執行緒與建立控制項的執行緒不同

解決方式

1.可用現成的控制項BackgroundWorker

2.建立委派(Delegate)

下面以委派的方式解決跨執行緒問題

跨執行緒變更Label顯示文字

private delegate void lbCallBack(Label label, String value);
private void ChangeLb(Label label, String value)
{
    if (label.InvokeRequired)
    {
        lbCallBack d = new lbCallBack(ChangeLb);
        this.Invoke(d, new object[]
        {
            label,
            value
        });
    }
    else
    {
          label.Text = value;
    }
}
文章標籤
跨執行緒 Winform
全站熱搜
創作者介紹
創作者 達達 的頭像
達達

Programer達

達達 發表在 痞客邦 留言(0) 人氣()