在上位机开启时,由于需要加载大量的控件,类和相关的文件。所以在加载时需要创建一个独立窗口的进度条用于在加载主窗口前预留一定的时间,并使得上位机更加美观。
第一步:新建一个窗体类
对进度条设置:属性为public共有
对进度条窗口进行设置,将图标与边框去除
//进度条窗口类
public partial class Form2 : Form
{
//创建构造函数,用于实例化对象
public Form2(int _Minimum, int _Maximum)
{
InitializeComponent();
progressBar1.Maximum = _Maximum;//设置范围最大值
progressBar1.Value = progressBar1.Minimum = _Minimum;//设置范围最小值
}
//创建进度运行显示过程
public void SetPos(int iValue, string sTip = "系统启动中...")
{
if (iValue <= this.progressBar1.Maximum)
{
progressBar1.Value = iValue;//设置进度值
label2.Text = sTip;
label3.Text = (iValue * 100 / progressBar1.Maximum).ToString() + "%";//显示百分比
Thread.Sleep(1);
}
Application.DoEvents();//重点,必须加上,否则父子窗体都假死
}
private void Form2_Load(object sender, EventArgs e)
{
this.Owner.Enabled = false;//设置父窗体不可用
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Owner.Enabled = true;//设置父窗体可用
}
}
//主窗口类
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int nProcessValue = 0;
//创建进度条对象
Form2 processForm;
private void Form1_Load(object sender, EventArgs e)
{
//实例化对象
processForm = new Form2(0, 100);
//初始化系统
InitialSys();
}
private void InitialSys()
{
try
{
//开启进度条显示
this.Show();
this.WindowState = FormWindowState.Maximized;
this.Hide();
processForm.Show(this);
//使用对应的加载程序
//其中可以在这部分添加需要加载的函数
nProcessValue = 10;
SetPos(nProcessValue, "上位机启动中...");
nProcessValue = 15;
SetPos(nProcessValue, "加载配置文件...");
nProcessValue = 80;
SetPos(nProcessValue, "上位机加载成功。。。");
nProcessValue = 95;
SetPos(nProcessValue, "启动系统成功...");
}
catch (Exception ex)
{
//错误弹出内容
}
finally
{
//结束,进度条窗口关闭,父窗口开启
processForm.Close();
this.Show();
}
}
//设置进度条位置,以及加载速度
private void SetPos(int value, string str)
{
int cur = processForm.progressBar1.Value;
for (int i = cur; i <= value; i++)
{
processForm.SetPos(i, str);//设置进度条位置
//每百分之1为0.1秒。使用线程控制
Thread.Sleep(100);//睡眠时间为100
}
}
}