开发者社区> xland> 正文

为winform程序注册闪屏(等待窗体)

简介: 先来张图片 请稍候的窗体就是我要说的闪屏了 实现这个效果有很多种办法 1  Application.Idle +=new EventHandler(Application_Idle); 2  异步执行方法 3  异步线程 我用的第三种 1先做一个闪屏窗体    你在上图中看到的闪...
+关注继续查看

先来张图片

img_570a6de5b54ed450e4e9fcdd5852fd02.png

请稍候的窗体就是我要说的闪屏了

实现这个效果有很多种办法

1  Application.Idle +=new EventHandler(Application_Idle);

2  异步执行方法

3  异步线程

我用的第三种

1先做一个闪屏窗体

   你在上图中看到的闪屏用到了第三方控件名字叫:DevExpress

2写一个公开的方法显示闪屏

img_1c53668bcee393edac0d7b3b3daff1ae.gifimg_405b18b4b6584ae338e0f6ecaf736533.gifCode
        /// <summary>
        
/// 显示闪屏
        
/// </summary>
        public static void ShowFlashForm()
        {

             object lockObject = new object();
            lock (lockObject)
            {

               ProcessForm processForm 
= new ProcessForm();
               processForm.ShowDialog();

            }
        }


3在需要闪屏的地方注册闪屏

img_1c53668bcee393edac0d7b3b3daff1ae.gifimg_405b18b4b6584ae338e0f6ecaf736533.gifCode
            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晚修改了此文:
只要这两句,就可以实现以上效果

两句中间就是你要执行的操作

img_405b18b4b6584ae338e0f6ecaf736533.gif代码

Thread t = new Thread(new ThreadStart(()=>{Application.Run(new waitForm());}));
Application.OpenForms[
"waitForm"].Invoke(new Action(() => { Application.OpenForms["waitForm"].Close(); }));

 12.10晨修改此文:

以上说的都不对
注册闪屏的工具类的最终版本如下

img_405b18b4b6584ae338e0f6ecaf736533.gif代码

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();
}
}

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
窗体界面控件源码解析
这是我早期自己编写的一段代码,注释不是很详细,只是对必要部分做了简短说明。现在把所有的源码发布出来,对希望对这方面编程感兴趣的朋友提供可参考的资料
455 0
+关注
xland
上市公司研发部门经理 管理着40个人以上的技术团队; 服务过诸多大型客户; 为很多知名开源项目提交过代码; 开发过几十万用户的APP; 技能:C++/.NET/JS/架构
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载