【問題解決】線程間操作無效:從不是創建控件“textBox1”的線程訪問它


背景

通過一個輔助線程計算出的一個值賦給textBox1.text;

解決辦法

1.直接在窗體的構造函數中添加:

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 

此時禁用了所有的控件合法性檢查。

 

2.通過代理來解決(msdn)

private delegate void SetTextCallback(string text);
//在給textBox1.text賦值的地方調用以下方法即可
private void SetText(string text)
{
    // InvokeRequired需要比較調用線程ID和創建線程ID
    // 如果它們不相同則返回true
    if (this.textBox1.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(SetText);
        this.Invoke(d, new object[] { text });
    }
    else
    {
        this.textBox1.Text = text;
    }
}

這里主要用到了.NET中的 delegate。

關於delegate的詳述,請參閱: 談C#中的Delegate

 

【原文參考】線程間操作無效: 從不是創建控件“textBox1”的線程訪問它 


免責聲明!

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



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