c进度条实现方法

c进度条实现方法方法一 多线程使用 c 做 WinFrom 开发 要实现进度条效果就需要用到多线程 如果不采用多线程控制进度条 窗口很容易假死 无法适时看到进度信息 1 设计界面 注意需要引用 usingSystem Threading 控件名称分别为 progressBar1 label1 textBox1 button1 2 定义一个代理 用于更新 ProgressBar 的值 Value

方法一:多线程

使用c#做WinFrom开发,要实现进度条效果就需要用到多线程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息)。

1、设计界面,注意需要引用 using System.Threading;

1

控件名称分别为:

progressBar1;label1;textBox1;button1;

2、定义一个代理,用于更新ProgressBar的值(Value)及在执行方法的时候,返回方法的处理信息。

 private delegate void SetPos(int ipos,string vinfo);//代理

3、进度条值更新函数(参数必须跟声明的代理参数一样)

 private void SetTextMesssage(int ipos,string vinfo) { if (this.InvokeRequired) { SetPos setpos = new SetPos(SetTextMesssage); this.Invoke(setpos, new object[] { ipos,vinfo }); } else { this.label1.Text = ipos.ToString() + "/1000"; this.progressBar1.Value = Convert.ToInt32(ipos); this.textBox1.AppendText(vinfo); } }

4、函数实现

              private void button1_Click(object sender, EventArgs e)

 { Thread fThread = new Thread(new ThreadStart(SleepT)); fThread.Start(); } 

5、新的线程执行函数:

 private void SleepT() { for (int i = 0; i < 500; i++) { System.Threading.Thread.Sleep(10); SetTextMesssage(100*i/500,i.ToString()+"\r\n"); } }

程序运行效果图:

2

 

方法二:通过控件backgroundWorker1实现

1、主窗体设计:

3

控件名称:

button1;backgroundWorker1;

对backgroundWorker1控件,属性设置:

4

2、主页面后台代码:

              using System.Threading;//引用空间名称

 private void button1_Click(object sender, EventArgs e) { this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件 ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体 form.ShowDialog(this); form.Close(); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show(e.Error.Message); } else if (e.Cancelled) { } else { } } //你可以在这个方法内,实现你的调用,方法等。 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for (int i = 0; i < 100; i++) { Thread.Sleep(100); worker.ReportProgress(i); if (worker.CancellationPending) // 如果用户取消则跳出处理数据代码 { e.Cancel = true; break; } } }

分别为button控件和backgroundWorker1控件选好事件。

3、设置子窗体(及显示进度条的窗体):

5

控件名称:

progressBar1;button1

4、子窗体,后台代码:

        private BackgroundWorker backgroundWorker1; //ProcessForm 窗体事件(进度条窗体)

 public ProcessForm(BackgroundWorker backgroundWorker1) { InitializeComponent(); this.backgroundWorker1 = backgroundWorker1; this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); } void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //this.Close();//执行完之后,直接关闭页面 } void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.progressBar1.Value = e.ProgressPercentage; } private void button1_Click(object sender, EventArgs e) { this.backgroundWorker1.CancelAsync(); this.button1.Enabled = false; this.Close(); } }

只为button选好事件

执行效果为:

c#进度条实现方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219870.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:42
下一篇 2026年3月17日 下午9:43


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号