在主线程中做大量数据处理时,会造成整个客户端页面的卡死,对用户不太友好。
这里采用:将后台处理数据的逻辑放到子线程中,再通过子线程中的委托告知主线程处理情况,再在主线程中对页面的控件进行处理,可以实现loading条,进度条等的友好交互效果。
例如下图中的简单提示:
直接上步骤说明:
1. 在主窗体中添加panel和label,如图
说明:此处就不添加button来触发处理操作了,直接写到主窗体的构造方法里。
实际项目中,应该在主窗体的构造方法中设置该panel和label的隐藏,在点击按钮开启子线程触发“处理”方法之前,控制该panel和label的显示。
2. 在另一个类中,模拟处理数据的方法,供子线程调用
using System.Threading;
namespace LoadingTest
{
class LoadData
{
// 声明一个返回结束信息给主线程的委托
public delegate void SendEndMessage(string mes);
public SendEndMessage sendEndMes;
/// <summary>
/// 模拟一个处理时间很长的方法
/// </summary>
public void load(object obj)
{
// 当前线程sleep 10秒
Thread.Sleep(10000);
// 调用通知主程序处理结束的委托,并可以传递参数
sendEndMes