【C#利用后台动态加载数据】Winform“防界面卡死”

原文:http://www.cnblogs.com/Zeech-Lee/archive/2011/10/14/2212376.html

所使用的类:using System.ComponentModel下的BackgroundWorker ;

该类下有四个重要的方法:DoWork、ProgressChanged、RunWorkerCompleted、RunWorkerAsync,两个重要的属性WorkerSupportsCancellation、WorkerReportsProgress

方法:

1.DoWork:意思就是利用后台具体做什么,绑定时间时传入的参数是方法名

2.ProgressChanged:进度发生变化时后台该做什么,绑定时间时传入的参数是方法名

3.RunWorkerCompleted:后台工作完后该做什么,绑定时间时传入的参数是方法名

4.RunWorkerAsync:启用后台,后台开始运行

属性:

1.WorkerSupportsCancellation:是否支持异步取消

2.WorkerReportsProgress:是否报告进度更新,这个属性很重要,必须启用才能对进度进行报告

需要的功能是:点击开始,开始一个一个列出C盘下的文件名,同时进度条显示进度。
第一个方法,把文件名添加到listview里面的添加方法,在此为了模拟取数据时网络,速度慢的情况Thread.Sleep( 500),休眠了0.5秒:
复制代码
 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         }
复制代码
注意:在后台中定义三个方法的时候,格式必须是套用模版。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值