C# WinForm 執行緒間操作無效: 從不是建立控制元件的執行緒訪問它的解決辦法

zmxyzmxy1234發表於2020-11-30

.net2後是不能跨執行緒訪問控制元件的。,窗體上的控制元件是當前執行緒建立的,當使用者非同步執行一個方法:在該方法中給窗體上的控制元件賦值,記住:當執行一個非同步委託的時候,其實

就是開了一個執行緒去執行那個方法,這樣就會報錯:執行緒間操作無效: 從不是建立控制元件“某某某”的執行緒訪問它。

1.在視窗執行緒中設定CheckForIllegalCrossThreadCalls = false

public Form1()
{
    InitializeComponent();
    Control.CheckForIllegalCrossThreadCalls = false;
}

2. 利用委託

private void button1_Click(object sender, EventArgs e)
{
    new Action(show).BeginInvoke(null, null);
}

void show()
{
    //非同步外的方法。這樣窗體不會假死
    while (true)
    {
        Thread.Sleep(2000);
        Action ac = new Action(showText);
        this.Invoke(ac); //在同步方法裡面實現更新窗體上的資料
    }
}

/// <summary>
/// 更新資料
/// </summary>
void showText()
{
    richTextBox1.AppendText("更新\n");
}

大家可以參考下MSDN:
如何:對 Windows 窗體控制元件進行執行緒安全呼叫

msdn.microsoft.com/zh-cn/visualc/ms...
轉載:www.cnblogs.com/nsky/p/4436309.htm...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章