日期:2014-05-18 浏览次数:21334 次
//一个模拟.....也可能不适合你,不知道你的发送文件代码是怎么写的 private void button3_Click(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(Send)); thread.Start(); } private void Send() { int i = 0; while (i <= 100) { //显示进度 信息 this.ShowPro(i); //循环发生文件 //模拟的 i++; //模拟发送多少 Thread.Sleep(100); } Thread.CurrentThread.Abort(); } private void ShowPro(int value) { if (this.InvokeRequired) { this.Invoke(new ProgressBarShow(ShowPro), value); } else { this.progressBar1.Value = value; this.label1.Text = value + "%"; } }
------解决方案--------------------
前几天刚用过,修改了一下,参考了一位前辈的例子
http://blog.mylover.cn/2009/02/post-3.html
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace TestProgressBar { public partial class TestForm : Form { //线程开始的时候调用的委托 private delegate void maxValueDelegate(WordEventArgs e); //线程执行中调用的委托 private delegate void nowValueDelegate(WordEventArgs e); //线程执行结束调用的委托 private delegate void endValueDelegate(WordEventArgs e); public TestForm() { InitializeComponent(); } private void btn_Test_Click(object sender, EventArgs e) { Worker worker = new Worker(); /// 订阅事件 worker.OnStartWorkEvent += new WorkEventHandler(this.OnStartWorkEventHandler); worker.OnDoWorkEvent += new WorkEventHandler(this.OnDoWorkEventHandler); worker.OnEndWorkEvent += new WorkEventHandler(this.OnEndWorkEventHandler); Thread thread = new Thread(new ThreadStart(worker.Work)); thread.Start(); } /// <summary> /// 线程开始事件,设置进度条最大值,需要一个委托来替我完成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnStartWorkEventHandler(object sender, WordEventArgs e) { maxValueDelegate max = new maxValueDelegate(SetMaxValue); this.Invoke(max, e); } /// <summary> /// 线程执行中的事件,设置进度条当前进度,需要一个委托来替我完成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnDoWorkEventHandler(object sender, WordEventArgs e) { nowValueDelegate now = new nowValueDelegate(SetNowValue); this.Invoke(now, e); } /// <summary> /// 线程完成事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnEndWorkEventHandler(object sender, WordEventArgs e) { endValueDelegate end = new endValueDelegate(SetEndValue); this.Invoke(end, e); } /// <summary> /// 被委托调用,专门设置进度条最大值的 /// </summary> /// <param name="maxValue"></param> private void SetMaxValue(WordEventArgs e) { this.probar_Test.Maximum = e.Position; lbl_Info.Text = e.Info; } /// <summary> /// 被委托调用,专门设置进度条当前值的 /// </summary> /// <param name="nowValue"></param> private void SetNowValue(WordEventArgs e) { this.probar_Test.Value