1.解決畫面卡頓問題
2.解決“從不是創(chuàng)建控件的線程訪問它“問題
private void btnLoad_Click(object sender, EventArgs e) {
Thread thConnect = new Thread(new ThreadStart(BackgroundLoad));
thConnect.IsBackground = true;
thConnect.Start();
}
private void BackgroundLoad() {
//訪問服務器API獲得返回數(shù)據(jù)
//處理返回數(shù)據(jù)
string dataFromServer = "aabbccdd";
//呈現(xiàn)數(shù)據(jù)
?lblData.Text = dataFromServer;
// 直接修改會報錯:從不是創(chuàng)建控件的線程訪問它
// 解決方法一:如果同一時間只有一個線程操作一個控件,可以在窗體構造函數(shù)中加入下句,就可以
// Control.CheckForIllegalCrossThreadCalls = false;
// 解決方法二:不直接修改,而用更安全的 委托 + invoke
// updateData(dataFromServer);
}
// 創(chuàng)建更新數(shù)據(jù)委托
delegate void updateDataDelegate();
// 更新數(shù)據(jù)
void updateData(string dataFromServer) {
if (this.InvokeRequired)
Invoke(new updateDataDelegate(updateData), new object[] { dataFromServer});
else {
lblData.Text = dataFromServer;
}
}