首先,关于BackgroundWorker的用法,请参考http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(VS.80).aspx,讲的很详细哦
下边是我的程序:
进度条页面:ProgressForm 中添加ProgressBar控件,FormBorderStyle:None; StartPosition:CenterScreen;
主Worker页面:QuickNewDeviceForm
private void okButton_Click(object sender, EventArgs e)
{
//隐藏快速新增页面
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
//打开进度条页面
myProcessBar = new ProgressForm();
myProcessBar.StartPosition = FormStartPosition.CenterScreen;
myProcessBar.prcBar.Value = 1;
myProcessBar.lbProgressValue.Text = "1%";
myProcessBar.Show();
myProcessBar.TopMost = true;
//打开新增设备的线程
highestPercentageReached = 0;
this.backgroundWorker1.RunWorkerAsync();
}
/// <summary>
/// 将数据插入数据库
/// </summary>
private void InsertData(BackgroundWorker worker, DoWorkEventArgs e)
{
。。。。。。。。。。。。。
for (int i = 2; i <= deviceCount; i++)
{
。。。。。。。
int percentComplete = (int)((float)i / (float)deviceCount * 100);
if (percentComplete > highestPercentageReached)
{
highestPercentageReached = percentComplete;
worker.ReportProgress(percentComplete);
}
}
delegate void DgInsertData(BackgroundWorker worker, DoWorkEventArgs e);
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
InsertData(worker, e);
}
delegate void DgSetProgressValue(int value);
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
DgSetProgressValue Dspv = new DgSetProgressValue(SetProgressValue);
this.Invoke(Dspv, e.ProgressPercentage);
}
delegate void DgCloseProgress();
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DgCloseProgress Dspv = new DgCloseProgress(CloseProgress);
this.Invoke(Dspv);
}
private void SetProgressValue(int progressPercentage)
{
myProcessBar.prcBar.Value = progressPercentage;
myProcessBar.lbProgressValue.Text = progressPercentage.ToString() + "%";
}
private void CloseProgress()
{
parentForm.ReadDeviceData();
this.DialogResult = DialogResult.OK;
myProcessBar.Close();
this.Close();
}
写的有点乱,希望我下次看的时候还能看懂,哈哈哈
如果不懂,可参考D:/程序/Lamp_OPC/Configuration/Forms/QuickNewDeviceForm.cs