.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 協議》,轉載必須註明作者和本文連結