先来张图片
请稍候的窗体就是我要说的闪屏了
实现这个效果有很多种办法
1 Application.Idle +=new EventHandler(Application_Idle);
2 异步执行方法
3 异步线程
我用的第三种
1先做一个闪屏窗体
你在上图中看到的闪屏用到了第三方控件名字叫:DevExpress
2写一个公开的方法显示闪屏
Code
/// <summary>
/// 显示闪屏
/// </summary>
public static void ShowFlashForm()
{
object lockObject = new object();
lock (lockObject)
{
ProcessForm processForm = new ProcessForm();
processForm.ShowDialog();
}
}
3在需要闪屏的地方注册闪屏
Code
Thread t = new Thread(new ThreadStart(Utils.ShowFlashForm));
t.Start();
LoadMainForm();
t.Abort();
t.Join();
注意t.Join()是必须的
不然有报“正在终止线程”错误的可能
11.25晨修改了此文:
做DEMO如下:http://files.cnblogs.com/liulun/XLFlashForm.rar
12.5中午修改了此文:
对线程访问的方法做了并发多线程访问的限制
12.9晚修改了此文:
只要这两句,就可以实现以上效果
两句中间就是你要执行的操作
代码
Thread t = new Thread(new ThreadStart(()=>{Application.Run(new waitForm());}));
Application.OpenForms["waitForm"].Invoke(new Action(() => { Application.OpenForms["waitForm"].Close(); }));
12.10晨修改此文:
以上说的都不对
注册闪屏的工具类的最终版本如下
代码
private ProcessForm processForm;
private void ShowWaitMess()
{
try
{
processForm.ShowDialog();
}
catch (Exception Err)
{
}
}
private void DoCloseJob()
{
try
{
if (!processForm.IsDisposed)
{
processForm.Close();
}
}
catch (Exception Err)
{
}
}
/// <summary>
/// 显示窗体
/// </summary>
/// <param name="TypeStr"></param>
/// <param name="TypeTxt"></param>
public void Show()
{
try
{
processForm = new ProcessForm();
Thread upgradeThread = new Thread(new ThreadStart(ShowWaitMess));
upgradeThread.Start();
}
catch (Exception ex)
{
}
}
/// <summary>
/// 关闭窗体
/// </summary>
public void Close()
{
if (processForm.InvokeRequired)
{
processForm.Invoke(new Action(DoCloseJob));
}
else
{
DoCloseJob();
}
}