1.解决画面卡顿问题
2.解决“从不是创建控件的线程访问它“问题
private void btnLoad_Click(object sender, EventArgs e) {
Thread thConnect = new Thread(new ThreadStart(BackgroundLoad));
thConnect.IsBackground = true;
thConnect.Start();
}
private void BackgroundLoad() {
//访问服务器API获得返回数据
//处理返回数据
string dataFromServer = "aabbccdd";
//呈现数据
❌lblData.Text = dataFromServer;
// 直接修改会报错:从不是创建控件的线程访问它
// 解决方法一:如果同一时间只有一个线程操作一个控件,可以在窗体构造函数中加入下句,就可以
// Control.CheckForIllegalCrossThreadCalls = false;
// 解决方法二:不直接修改,而用更安全的 委托 + invoke
// updateData(dataFromServer);
}
// 创建更新数据委托
delegate void updateDataDelegate();
// 更新数据
void updateData(string dataFromServer) {
if (this.InvokeRequired)
Invoke(new updateDataDelegate(updateData), new object[] { dataFromServer});
else {
lblData.Text = dataFromServer;
}
}