说明
类似启动word,由于启动速度慢,先打开一个窗口,并显示进度条,加载完毕后,才显示主窗口
第一步:实现启动窗口
创建启动窗口
界面如下图:
添加进度条
略,没有设置其他属性
backgroundWorker
设置 DoWork
、ProgressChanged
、RunWorkerCompleted
3个事件函数
代码
public partial class StartForm : Form
{
public StartForm()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
//this.TopMost = true; // 显示在最前,窗口开始显示进度条时是透明的
this.StartPosition= FormStartPosition.CenterScreen;
progressBgWorker.WorkerReportsProgress= true;
// 执行worker
progressBgWorker.RunWorkerAsync();
}
private void progressBgWorker_DoWork(object sender, DoWorkEventArgs e)
{
//设置完成进度
progressBgWorker.ReportProgress(10);
// 这里写耗时操作
progressBgWorker.ReportProgress(20);
// 这里写耗时操作
progressBgWorker.ReportProgress(40);
// 这里写耗时操作
progressBgWorker.ReportProgress(60);
// 这里写耗时操作
progressBgWorker.ReportProgress(80);
// 这里写耗时操作
progressBgWorker.ReportProgress(99);
Thread.Sleep(600);
}
private void progressBgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar.Value = e.ProgressPercentage;
}
private void progressBgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DialogResult = DialogResult.OK;
}
}
第二步:修改Program
注释掉下面代码:
Application.Run(new Form1());
然后添加下面代码:
StartForm startForm= new StartForm();
if (DialogResult.OK == startForm.ShowDialog())
{
// 关闭对话框不会销毁,调用Dispose()才销毁
startForm.Dispose();
Application.Run(new Form1());
}