C#.NET中使用BackgroundWorker在模态对话框中显示进度条
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#.NET中使用BackgroundWorker在模态对话框中显示进度条,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2693字,纯文字阅读大概需要4分钟。
内容图文
![C#.NET中使用BackgroundWorker在模态对话框中显示进度条](/upload/InfoBanner/zyjiaocheng/1186/e99abebd50374d3189514d4a1f9f9828.jpg)
这里是一个示例,其中展示了如何使用Backgroundworker对象在模态对话框中显示后台操作的实时进度条。
首先是主窗体代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace ModalProgressDialog { publicpartialclass Form1 : Form { protected BackgroundWorker worker = new BackgroundWorker(); protected Form2 frm = new Form2(); public Form1() { worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); InitializeComponent(); } privatevoid button1_Click(object sender, EventArgs e) { worker.WorkerReportsProgress = true; worker.RunWorkerAsync(); frm.ShowDialog(); } void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { frm.Close(); MessageBox.Show("Done"); } void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { frm.ProgressValue = e.ProgressPercentage; } void worker_DoWork(object sender, DoWorkEventArgs e) { CountTheTime(); } privatevoid CountTheTime() { int initialValue = 100; for (int count = 0; count < initialValue; count = count + 2) { Thread.Sleep(1000); worker.ReportProgress(count); } } } }
主窗体中只有一个按钮,当被点击时,会由BackgroundWorker对象以异步的方式去执行一个假象的后台操作CountTheTime方法。CountTheTime方法从0到100以步长为2每隔1秒更新一下进度条状态,因此这个假象的后台操作大约会持续50秒左右的时间。当程序执行时,进度条指示窗口以模态对话框的形式被弹出,然后实时显示后台操作的进度。
BackgroundWorker对象有三个主要的事件:
DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。
RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成时触发。
ProgressChanged - 当BackgroundWorker对象的多线程操作状态改变时触发。
另外还有一个非常重要的属性WorkerReportsProgress - 如果想让BackgroundWorker对象以异步的方式报告线程实时进度,必须将该属性的值设为true。
BackgroundWorker对象的ReportProgress方法用于向主线程返回后台线程执行的实时进度。
下面是子窗体的代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ModalProgressDialog { publicpartialclass Form2 : Form { publicint ProgressValue { get { returnthis.progressBar1.Value; } set { progressBar1.Value = value; } } public Form2() { InitializeComponent(); } } }
子窗体中放置了一个ProgressBar控件,对外可以通过ProgressValue属性来获取和修改进度条的当前值。同时,我们可以将子窗体的FormBorderStyle属性设为FixedDialog以使其看起来更像对话框,然后将MaximizeBox和MinimizeBox都设为false,将ControlBox属性设为false以隐藏窗体关闭按钮。在父窗体中,我们通过BackgroundWorker对象的RunWorkerAsync方法触发DoWork事件,此时CountTheTime()方法被执行。在CountTheTime()方法中,通过ReportProgress()方法从后台进程(父窗体)传递进度指示到主UI线程(子窗体)中,这样同时会触发ProgressChanged事件,然后我们在该事件中更新子窗体的进度条状态
原文:http://www.cnblogs.com/wangchuang/p/4483418.html
内容总结
以上是互联网集市为您收集整理的C#.NET中使用BackgroundWorker在模态对话框中显示进度条全部内容,希望文章能够帮你解决C#.NET中使用BackgroundWorker在模态对话框中显示进度条所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。