C#实现进度条显示 - 独立窗体
- C#处理多条数据时,需要使用进度条告诉用户当前进度
- 使用独立窗体的进度条可以在程序中随时调用
首先,上图
点击“显示进度”按钮,即可调出进度条窗体。
-
首先做进度条界面,一个Label和一个ProgressBar
主要方法如下public void SetStatus(string msg) { if (this.label1.InvokeRequired) this.label1.Invoke(new Action<string>(SetStatus), msg); else this.label1.Text = msg; } public void SetProgress(int value) { if (this.progressBar1.InvokeRequired) this.label1.Invoke(new Action<int>(SetProgress), value); else this.progressBar1.Value = value < 0 ? 0 : value > 100 ? 100 : value; // if (value == 100) this.Invoke(new Action(this.Hide)); this.Refresh(); }
-
编写进度窗体控制类,外部调用使用这个类进行操作,不直接调用进度条窗体。使用BackgroundWorker做纤细传递和处理的媒介。主要代码如下:
public void DoIt() { if (worker == null && worker.IsBusy) return; worker.RunWorkerAsync(); _PrgressForm.ShowDialog(); } public void DoIt(object o) { if (worker == null && worker.IsBusy) return; worker.RunWorkerAsync(o); _PrgressForm.ShowDialog(); } public void Abort() { worker.CancelAsync(); } private void ProgressComplete(object sender, RunWorkerCompletedEventArgs e) { if (this._PrgressForm != null) { _PrgressForm.SetStatus(""); _PrgressForm.SetProgress(0); this._PrgressForm.Dispose(); } } private void ProgressChanged(object sender, ProgressChangedEventArgs e) { string message = e.UserState as string; if (message.StartsWith("ERROR:")) { _PrgressForm.RaiseError(message.Substring(6)); } else if (message.StartsWith("INFORM:")) { _PrgressForm.RaiseInform(message.Substring(7)); } else { _PrgressForm.SetStatus(message); _PrgressForm.SetProgress(e.ProgressPercentage); } } public void Dispose() { _PrgressForm.Dispose(); _PrgressForm = null; worker = null; }
-
这样,进度条窗体已经完成,那么调用的时候如下:
private void btnShowProgress_Click(object sender, EventArgs e) { using (ProgressHolder holder =new ProgressHolder(DoWork,"测试进度条显示")) { holder.DoIt(500); } } private void DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; int max = (int)e.Argument; for (int i = 0; i < max; i++) { worker.ReportProgress((int)((double)i / max * 100), "正在处理第 " + i + " 条数据,请等待..."); Thread.Sleep(5); } }
点击按钮后,就可以出现如图所示的进度显示啦!
有需要的朋友可以去下链接下载哦,支持一下吧!
https://download.csdn.net/download/gentelwind/12919311