【C#利用后台动态加载数据】Winform“防界面卡死”
废话:最近遇到的项目发现,对于Winform获取大数据量时,界面假死,体验效果非常差。身为测试员,有义务也有责任提出BUG。每次测试都面对卡了超过5秒的界面,实在是一种折磨,更是一种自杀行为。与是自己便研究了下,可以通过多线程来处理,当然也可以通过后台来获取数据。如果用多线程的话可以解决界面卡死的情况,但是对于动态加载数据的话可能复杂些。因为多线程的话,需要执行完一个线程再把数据更新出来,智能化不够高。使用后台的话,可以随时报告获取的数据,能够精确到某一条,而且使用起来很方便,因为是已经封装好了的。
所使用的类:using System.ComponentModel下的BackgroundWorker ;
该类下有四个重要的方法:DoWork、ProgressChanged、RunWorkerCompleted、RunWorkerAsync,两个重要的属性WorkerSupportsCancellation、WorkerReportsProgress
方法:
1.DoWork:意思就是利用后台具体做什么,绑定时间时传入的参数是方法名
2.ProgressChanged:进度发生变化时后台该做什么,绑定时间时传入的参数是方法名
3.RunWorkerCompleted:后台工作完后该做什么,绑定时间时传入的参数是方法名
4.RunWorkerAsync:启用后台,后台开始运行
属性:
1.WorkerSupportsCancellation:是否支持异步取消
2.WorkerReportsProgress:是否报告进度更新,这个属性很重要,必须启用才能对进度进行报告
下面进入后台动态加载数据的例子:
我们先做一个简单的界面如图:

1 public void Add(object sender, DoWorkEventArgs e)
2 {
3 DirectoryInfo di = new DirectoryInfo(@"C:/");
4 foreach (FileInfo item in di.GetFiles())
5 {
6 ListViewItem lvt = new ListViewItem();//用listviewItem来存储获取到文件的信息
7 lvt.Text = item.FullName;
8 lvt.SubItems.Add(DateTime.Now.ToLongTimeString());
9 Thread.Sleep(500);
10 Bw.ReportProgress(listView1.Items.Count,lvt);//把当前的进度报告出去,获取到第几个文件和该文件的信息
11 }
12
13 }

1 public void Progress(object sender, ProgressChangedEventArgs e)
2 {
3 progressBar1.Value = e.ProgressPercentage;//获取第几个文件,用来改变进度条的进度
4 ListViewItem lv = e.UserState as ListViewItem;
5 listView1.Items.Add(lv);//把最新获取到的文件信息添加到listview
6 }
1 public void End(object sender, AsyncCompletedEventArgs e)
2 {
3 progressBar1.Value = 0;//进度条清0
4 }

1 private void button1_Click(object sender, EventArgs e)
2 {
3 DirectoryInfo di = new DirectoryInfo(@"C:/");
4 FileInfo[] fi = di.GetFiles();
5 progressBar1.Maximum = fi.Length - 1;//设置进度条的最大值
6 Bw.WorkerSupportsCancellation = true;
7 Bw.WorkerReportsProgress = true;
8 Bw.DoWork += new DoWorkEventHandler(Add);//绑定事件
9 Bw.ProgressChanged += new ProgressChangedEventHandler(Progress);
10 Bw.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(End);
11 Bw.RunWorkerAsync();
12 }
----转载请说明出处并联系作者,否则将会很伤心。----
-----------博主QQ:1226051092---------------------
------http://www.cnblogs.com/Zeech-Lee----------

posted on 2011-10-14 16:40 Zeech_Lee 阅读(19048) 评论(10) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架