.net2後是不能跨線程訪問控件的。,窗體上的控件是當前線程建立的,當用戶異步執行一個方法:在該方法中給窗體上的控件賦值,記住:當執行一個異步委託的時候,其實html
就是開了一個線程去執行那個方法,這樣就會報錯:線程間操做無效: 從不是建立控件「某某某」的線程訪問它。安全
public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; }
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