WinForm使用多线程异步加载界面数据

WinForm使用多线程异步加载界面数据

处于学习阶段,做个记录,如有写错,请多多指教。

private void FrmQC111_Load(object sender, EventArgs e)
{
    Thread load = new Thread((obj) =>
       {
         //创建一个新线程,并编写执行的方法
         Action<string> act = new Action<string>(Bindt); 
         act.BeginInvoke(null, null, null);
      });
    load.IsBackground = true;
    load.Start();
}
private void Bindt(string a)
{
	//实现具体绑定方法
}

1. 需求

页面初始化时,需要给大量下拉控件绑定下拉列表,数据源需要从数据库查询出来,如果使用默认的顺序加载方式,页面会在所有控件数据加载完成后才能初始化完成,页面会卡顿比较久的时间,为了页面加载及空间数据源加载互不影响,考虑使用异步加载的方式,将加载控件数据部分独立出一个新线程操作,与原线程互不影响,实现在显示页面的同时,异步加载控件数据。

1. 知识

多线程(主线程=前台线程、子线程=后台线程)
内置委托(Action)
Invoke以及BeginInvoke

1. 实现

此处不使用Lamba表达式,上面代码段是用Lamda表达式实现
通过Thread类创建子线程
private void FrmQC111_Load(object sender, EventArgs e)
{
Thread load = new Thread(new ThreadStart(loadpage));
//ThreadStart 是一个委托,ThreadStart 委托只能用于无返回值、无参数的方法,ParameterizedThreadStart 委托则可以用于带参数的方法
//Loadpage 是该线程将要执行的方法。
//Load是新线程对象。
}
通过内置委托的BeginInvoke绑定具体方法
Private void loadpage()
{
Action act = new Action(Bindt); //创建委托对象,与指定方法Bindt进行关联
act.BeginInvoke(null, null, null);
//第一个null,为action传入参数
//第二个null为异步回调函数
//第三个null为回调函数返回结果
}
实现加载控件数据源的方法
private void Bindt(String a)
{
//……….
}
参考:https://blog.csdn.net/qq_33574890/article/details/83386757
https://www.cnblogs.com/wyt007/p/9486752.html
https://www.cnblogs.com/Xue-Dragon/p/10578190.html
https://www.cnblogs.com/whl4835349/p/11757688.html
https://www.cnblogs.com/xingyuanzier/p/11144322.html
测试
因为数据加载过快,看不到异步执行结果,因此在绑定数据的方法中让线程等待10s以观察实际效果
Thread.Sleep(10000);
结果
页面会先打开,打开之后大概8s左右,控件数据自动加载成功。

参考文章:
https://blog.csdn.net/qq_33574890/article/details/83386757
https://www.cnblogs.com/wyt007/p/9486752.html
https://www.cnblogs.com/Xue-Dragon/p/10578190.html
https://www.cnblogs.com/whl4835349/p/11757688.html
https://www.cnblogs.com/xingyuanzier/p/11144322.html

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值