C# WinForm 線程間操做無效: 從不是建立控件的線程訪問它的解決辦法

.net2後是不能跨線程訪問控件的。,窗體上的控件是當前線程建立的,當用戶異步執行一個方法:在該方法中給窗體上的控件賦值,記住:當執行一個異步委託的時候,其實html

就是開了一個線程去執行那個方法,這樣就會報錯:線程間操做無效: 從不是建立控件「某某某」的線程訪問它。安全

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 窗體控件進行線程安全調用異步

http://msdn.microsoft.com/zh-...
轉載:https://www.cnblogs.com/nsky/...this

相關文章
相關標籤/搜索