//frmA: 源窗體 //------------------------------------------ //引用 using System.Threading;
BackgroundWorker worker;
public frmA() { InitializeComponent(); worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); } /// <summary> /// 異步 開始事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void worker_DoWork(object sender, DoWorkEventArgs e) { //需要執行的代碼
Thread.Sleep(5000); //讓進程上卡5秒鍾
} /// <summary> /// 事件: 異步執行完成后 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("執行完成。", "run", MessageBoxButtons.OK, MessageBoxIcon.Information); } //點擊一個按鈕后開始執行 private void btnA_Click(object sender, EventArgs e) {
//按鈕要執行的代碼放在 worker_DoWork 事件中執行
//異步執行開始 worker.RunWorkerAsync();
//顯示進度窗體 frmB frm = new frmB(this.worker); frm.StartPosition = FormStartPosition.CenterScreen; frm.ShowDialog(this); } frmB: //里面放了一個loading.gif圖片顯示進度 ------------------------------------------------------------ using System; using System.ComponentModel; using System.Windows.Forms; namespace test { public partial class frmB: Form { public frmB(BackgroundWorker worker) { InitializeComponent(); worker.ProgressChanged +=new ProgressChangedEventHandler(worker_ProgressChanged); worker.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); } void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.Close(); } void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { //lblStatus.Text = ""; } //工作完成后執行的事件 public void OnProcessCompleted(object sender, EventArgs e) { this.Close(); } }
二:在彈出的窗體里顯示backgroundWorker的進度
1, backgroundWorker1的WorkerReportsProgress屬性設置為true 2, 寫如下事件 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar.Value = e.ProgressPercentage; } progressBar是進度條是你定義的變量..可以寫在后台執行里面控制 3 .在后台執行里面 backgroundWorker1.ReportProgress(50); 其中50就是進度調的百分比. 比如一個循環循環100次 沒次backgroundWorker1.ReportProgress(循環次數); 那么效果出來 。。 哈哈