C# 创建新线程处理事情,防止画面卡顿

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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容