C#实现进度条显示 您所在的位置:网站首页 刷机不出进度条 C#实现进度条显示

C#实现进度条显示

2023-06-20 00:03| 来源: 网络整理| 查看: 265

C#实现进度条显示 - 独立窗体 C#处理多条数据时,需要使用进度条告诉用户当前进度使用独立窗体的进度条可以在程序中随时调用

首先,上图 在这里插入图片描述 点击“显示进度”按钮,即可调出进度条窗体。

首先做进度条界面,一个Label和一个ProgressBar 主要方法如下

public void SetStatus(string msg) { if (this.label1.InvokeRequired) this.label1.Invoke(new Action(SetStatus), msg); else this.label1.Text = msg; } public void SetProgress(int value) { if (this.progressBar1.InvokeRequired) this.label1.Invoke(new Action(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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有