【C#利用后台动态加载数据】Winform“防界面卡死”
2013-05-17 11:03
1436 查看
原文:/article/7069130.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秒:
第二个方法,获取到进度后,对进度进行报告:
第三个方法在本例子就显得像鸡肋了,当后台运行完毕后进行的事件:
最后在按钮双击事件中写入如下方法:
注意:在后台中定义三个方法的时候,格式必须是套用模版。
所使用的类: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 }
注意:在后台中定义三个方法的时候,格式必须是套用模版。
相关文章推荐
- 【C#利用后台动态加载数据】Winform“防界面卡死”
- 【C#利用后台动态加载数据】Winform“防界面卡死”
- 【C#利用后台动态加载数据】Winform“防界面卡死”
- (转)【C#利用后台动态加载数据】Winform“防界面卡死”
- 【C#利用后台动态加载数据】Winform“防界面卡死”
- C#利用反射技术实现winform界面动态存储
- 在jquery mobile制作app的几个页利用ajax将后台数据json数组动态加载到列表里面
- 利用js将ajax获取到的后台数据动态加载至网页中
- c# winform 欢迎界面时加载数据
- C#中/winform中,给已经绑定数据的datagridview后台动态添加新行
- 利用js将ajax获取到的后台数据动态加载至网页中
- 利用js将ajax获取到的后台数据动态加载至网页中的方法
- C# WinForm利用sideBar动态加载菜单栏,并创建菜单栏事件
- C# WinForm利用sideBar动态加载菜单栏,并创建菜单栏事件
- html中的数据岛:利用DSO和javascript在html中动态加载和浏览xml数据
- 基于C# winform企业进销存软件开发(典型权限控制+报表工具+动态加载+多线程+跨数据库访问)
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
- C# WinForm界面上实现按条件检索数据
- C# winform后台获取远程webservice Json 数据
- c# 用反射实现winform界面动态存储理论知识