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


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

http://msdn.microsoft.com/zh-cn/visualc/ms171728(VS.85,printer).aspx
轉載:https://www.cnblogs.com/nsky/p/4436309.html


免責聲明!

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



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