如果在程序中直接更新进度条,是无法响应的。使用BackgroundWorker可以解决该问题。
public partial class Form1 : Form { BackgroundWorker backgroundWorker1 = new backgroundWorker1; public Form1() { InitializeComponent(); Shown += new EventHandler(Form1_Shown); backgroundWorker1.WorkerReportsProgress = true; //允许报告进度 backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); //产生新的线程来处理任务 backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); //当调用ReportProgress会触发该事件 } void Form1_Shown(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); //开始异步操作 } void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //在这里进行程序任务 for (int i = 0; i <= 100; i++) { backgroundWorker1.ReportProgress(i); // 报告进度给UI线程 System.Threading.Thread.Sleep(100); //模拟耗时较长的任务 } } //返回到UI线程,更新进度条 void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; } }