如果在程序中直接更新進度條,是無法響應的。使用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; } }