//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(循環次數);
那么效果出來 。。 哈哈
