.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