前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为winform程序注册闪屏(等待窗体)

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

作者头像
liulun
发布2022-05-09 11:16:48
3740
发布2022-05-09 11:16:48
举报
文章被收录于专栏:liulunliulun

先来张图片

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

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

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

2  异步执行方法

3  异步线程

我用的第三种

1先做一个闪屏窗体

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

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

代码语言:javascript
复制
/// <summary>
        /// 显示闪屏
        /// </summary>
        public static void ShowFlashForm()
        {

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

代码语言:javascript
复制
Thread t = new Thread(new ThreadStart(Utils.ShowFlashForm));
            t.Start();
            LoadMainForm();
            t.Abort();
            t.Join();

注意t.Join()是必须的

不然有报“正在终止线程”错误的可能

11.25晨修改了此文:

做DEMO如下:https://files.cnblogs.com/liulun/XLFlashForm.rar

12.5中午修改了此文: 对线程访问的方法做了并发多线程访问的限制

12.9晚修改了此文: 只要这两句,就可以实现以上效果

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

代码语言:javascript
复制
            Thread t = new Thread(new ThreadStart(()=>{Application.Run(new waitForm());}));
            Application.OpenForms["waitForm"].Invoke(new Action(() => { Application.OpenForms["waitForm"].Close(); }));

 12.10晨修改此文:

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

代码语言:javascript
复制
        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();
            }
        }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档