进度条子窗口
Form窗口,界面如下:
禁止调整大小、禁止最大化、禁止最小化
代码
/// <summary>
/// 初始化进度条
/// </summary>
/// <param name="max"></param>
public void initProgressBar(int max)
{
progressBar.Visible = true;
// 设置进度条最小值.
progressBar.Minimum = 0;
// 设置进度条最大值.
progressBar.Maximum = max;
// 设置进度条初始值
progressBar.Value = 1;
// 设置每次增加的步长
progressBar.Step = 1;
}
/// <summary>
/// 设置进度条的进度
/// </summary>
/// <param name="i"></param>
public void setProgressBarValue(int i)
{
progressBar.Value = i;
}
/// <summary>
/// 设置进度条最大值
/// </summary>
/// <param name="i"></param>
public void setMax(int i)
{
// 设置进度条最大值.
progressBar.Maximum = i;
}
主窗口
private void progressBgWorker_DoWork(object sender, DoWorkEventArgs e)
{
progressForm.initProgressBar(10);
for (int flbIndex = 0; flbIndex < 10; flbIndex++)
{
progressBgWorker.ReportProgress(progress+1);
}
}
/// <summary>
/// 更新UI
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void progressBgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// 设置进度条
this.progressForm.setProgressBarValue(e.ProgressPercentage);
// 设置进度条窗口的标题
progressForm.Text = "正在合并 " + e.ProgressPercentage + "/" + fileLstBx.Items.Count;
}
// 完成时提示,并关闭窗口
private void progressBgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("合并成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressForm.Close();
}
关键1
进度条窗口定义成成员变量,可直接实例化
不要 在 BackgroundWorker的 DoWork()
方法中实例化,否则报错 从不是创建控件“progressBar”的线程访问它。
ProgressForm progressForm = new ProgressForm();
关键2
调用 RunWorkerAsync()
后,就显示进度条窗口
不要 在 BackgroundWorker 的 DoWork()
方法中显示进度条窗口,否则报错 从不是创建控件“progressBar”的线程访问它。
progressBgWorker.RunWorkerAsync();
progressForm.StartPosition = FormStartPosition.CenterParent;
progressForm.ShowDialog();