对于需要加载很多组件的应用程序来说,在启动的时候会非常的缓慢,可能会让用户误以为程序已经死掉,这显然不是我们希望看到的。如果能够在启动的时候动态的给用户一些反馈信息(比如当前正在加载的项),那么就可以有效的避免这一问题,并且可以给我们的应用程序增色不少。下边的图片是此代码的效果图。
下面是部分代码:
AppStart 类,包含Main方法
Splash功能类:
下面是部分代码:
AppStart 类,包含Main方法
public class AppStart
{
public AppStart()
{
}
[STAThread]
static void Main(string[] args)
{
// 显示Splash窗体
Splash.Show();
DoStartup(args);
// 关闭Splash窗体
Splash.Close();
}
static void DoStartup(string[] args)
{
// 做需要的事情
frmMain f = new frmMain();
Application.Run(f);
}
}
{
public AppStart()
{
}
[STAThread]
static void Main(string[] args)
{
// 显示Splash窗体
Splash.Show();
DoStartup(args);
// 关闭Splash窗体
Splash.Close();
}
static void DoStartup(string[] args)
{
// 做需要的事情
frmMain f = new frmMain();
Application.Run(f);
}
}
Splash功能类:
public class Splash
{
static frmSplash MySplashForm = null;
static Thread MySplashThread = null;
static void ShowThread()
{
MySplashForm = new frmSplash();
Application.Run(MySplashForm);
}
static public void Show()
{
if (MySplashThread != null)
return;
MySplashThread = new Thread(new ThreadStart(Splash.ShowThread));
MySplashThread.IsBackground = true;
MySplashThread.ApartmentState = ApartmentState.STA;
MySplashThread.Start();
}
static public void Close()
{
if (MySplashThread == null) return;
if (MySplashForm == null) return;
try
{
MySplashForm.Invoke(new MethodInvoker(MySplashForm.Close));
}
catch (Exception)
{
}
MySplashThread = null;
MySplashForm = null;
}
static public string Status
{
set
{
if (MySplashForm == null)
{
return;
}
MySplashForm.StatusInfo = value;
}
get
{
if (MySplashForm == null)
{
throw new InvalidOperationException("Splash Form not on screen");
}
return MySplashForm.StatusInfo;
}
}
}
{
static frmSplash MySplashForm = null;
static Thread MySplashThread = null;
static void ShowThread()
{
MySplashForm = new frmSplash();
Application.Run(MySplashForm);
}
static public void Show()
{
if (MySplashThread != null)
return;
MySplashThread = new Thread(new ThreadStart(Splash.ShowThread));
MySplashThread.IsBackground = true;
MySplashThread.ApartmentState = ApartmentState.STA;
MySplashThread.Start();
}
static public void Close()
{
if (MySplashThread == null) return;
if (MySplashForm == null) return;
try
{
MySplashForm.Invoke(new MethodInvoker(MySplashForm.Close));
}
catch (Exception)
{
}
MySplashThread = null;
MySplashForm = null;
}
static public string Status
{
set
{
if (MySplashForm == null)
{
return;
}
MySplashForm.StatusInfo = value;
}
get
{
if (MySplashForm == null)
{
throw new InvalidOperationException("Splash Form not on screen");
}
return MySplashForm.StatusInfo;
}
}
}
Splash 界面类:
public class frmSplash : System.Windows.Forms.Form
{
private string _StatusInfo = "";
public frmSplash()
{
InitializeComponent();
}
private void InitializeComponent()
{
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
//
}
public string StatusInfo
{
set
{
_StatusInfo = value;
ChangeStatusText();
}
get
{
return _StatusInfo;
}
}
public void ChangeStatusText()
{
try
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.ChangeStatusText));
return;
}
labStatus.Text = _StatusInfo;
}
catch (Exception e)
{
// 异常处理
}
}
}
{
private string _StatusInfo = "";
public frmSplash()
{
InitializeComponent();
}
private void InitializeComponent()
{
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
//
}
public string StatusInfo
{
set
{
_StatusInfo = value;
ChangeStatusText();
}
get
{
return _StatusInfo;
}
}
public void ChangeStatusText()
{
try
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.ChangeStatusText));
return;
}
labStatus.Text = _StatusInfo;
}
catch (Exception e)
{
// 异常处理
}
}
}
主界面类:
public class frmMain : System.Windows.Forms.Form
{
public frmMain()
{
InitializeComponent();
Splash.Status = "状态:载入初始化模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:载入管理模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:载入打印模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:载入插件模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:连接数据库";
System.Threading.Thread.Sleep(1000);
Splash.Close();
}
}
{
public frmMain()
{
InitializeComponent();
Splash.Status = "状态:载入初始化模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:载入管理模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:载入打印模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:载入插件模块";
System.Threading.Thread.Sleep(1000);
Splash.Status = "状态:连接数据库";
System.Threading.Thread.Sleep(1000);
Splash.Close();
}
}