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

先来张图片

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

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

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

 

时间: 2024-09-22 04:07:34

为winform程序注册闪屏(等待窗体)的相关文章

asp.net中WinForm版本升级器闪屏优化过程分享

最最近写了一个WinForm应用程序的版本升级器,测试发现没有新版本时升级器界面会一闪而过(闪屏),用户体验不好,于是想怎么解决这个问题. 升级器主要代码如下:  代码如下 复制代码 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         public Form1()         {   

浅谈如何在C#Winform程序中正确使用登录窗体

看到很多朋友在CSDN中发帖放分求"如何实现登录验证正确后弹出主窗体"的问题.关于这个问题的实现方法,一般很多人都是使用在登录窗体点击"登录"按钮后,通过后台数据验证正确后,把登录窗体隐藏,然后载入主窗体.还有一种做法是以上提问的这些人的一个不太对的一个实现办法(其实是无法实现的),他们的做法是点击"登录"按钮后,调用this.close()方法去把登录窗体关闭,然后实例化主窗体           frmMain dlg=new frmMain

两个独立的winform程序中,如何传递form窗体界面?

问题描述 就是在客户端Winform程序中的一个form窗体,需要在Server端Winform程序中完整的展现出来,目前想到了两种方式:第一种方式:将客户端程序中的form窗体做截图,直接传递到B程序.这样做传输量太大,再者有滚动条的界面展示不出来,不好用:第二种方式:将客户端程序Form窗体中的所有控件属性(大小,位置,值等等)当作参数,传递到Server端程序,在Server端程序中重新构建界面:这样需要传递的各种元素太多,比较麻烦.请教各位高手,还有没有其他比较好的方法么? 解决方案 解

Android闪屏示例程序

 用过手机QQ的基本上都知道,刚启动程序时候会在一个界面停留一会,按任意键的就直接跳过,这就是所谓的闪屏.那么,在Android中怎样实现这样的效果呢?  1.新建一个Android项目,命名为SplashyDemo,结构如下所示: 2. 添加资源图片: 首先我们得有闪屏时候显示的图片资源文件,并将图片放在res/drawable目录下,命名为splash.jpg: 这时候会在R类中自动添加资源文件对应的ID,如下所示: 3.编写闪屏的界面布局文件,放在res/layout目录下,如下图: 该布

Android实现闪屏及注册和登录界面之间的切换效果_Android

在没给大家介绍正文之前先给大家说下实现思路: 先分别实现闪屏.注册界面.登录界面的活动,再用Intent将相关的活动连接起来,实现不同活动之间的跳转.此次试验代码较多,我只列出主要代码,详细的代码可用底部的下载链接下载. 一.实验效果图: 二.主要代码: (1)WelcomeActivity.Java(这部分代码实现的是第一页的欢迎页面) package com.example.flashscreendemo; import android.app.Activity; import androi

Android实现闪屏及注册和登录界面之间的切换效果

在没给大家介绍正文之前先给大家说下实现思路: 先分别实现闪屏.注册界面.登录界面的活动,再用Intent将相关的活动连接起来,实现不同活动之间的跳转.此次试验代码较多,我只列出主要代码,详细的代码可用底部的下载链接下载. 一.实验效果图: 二.主要代码: (1)WelcomeActivity.Java(这部分代码实现的是第一页的欢迎页面) package com.example.flashscreendemo; import android.app.Activity; import androi

闪屏图形特技效果的实现

在程序实际开发中,闪屏是我们经常用到的.如果程序初始化要一些时间,设计闪屏更加有必要,不但使你的程序也漂亮,还能在上面写上你的版本信息.好处是多多的.在VC++6.0组件库中有一个splash screen闪屏组件,可以添加到程序中.但是初学者打开源代码学习时,里面函数太多,一时之间也搞不明白.而且显示的闪屏很呆板.为了使初学者明白,我搞了一个很简单的类,里面只有二个函数,结构很清晰.一看就明白,还有详细的注释.功能并不比VC++6.0自带那个逊色. 闪屏其实就是窗口,其基类是CWnd,与一般的

Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

  本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力.   首先看一下效果图吧,       原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label用来分别显示进度和进度信息,而Dialog的宽度和高度正是闪屏图片的宽度和高度.然后将闪屏图片贴到Dialog中作为整个窗体的背景,Dialog显示时覆盖闪屏所处的区域.由于Dialog显示时闪屏并没有消失,且Dialog的X.Y及宽高都与闪屏图片一致,因此实际切换时,非常流畅,

WINFORM应用,如何实现等待子线程结束的同时,主界面UI不卡,请高手出招,在线等..............

问题描述 WINFORM应用,如何实现等待子线程结束的同时,主界面UI不卡,请高手出招,在线等..............业务描述有以下耗时业务队列需要按顺序完成UI界面有按钮M,点击M,在处理函数YY中,需要执行以下任务队列{执行耗时业务A(提交给到线程)等待A完成处理结果执行耗时业务B(提交给到线程)等待B完成处理结果执行耗时业务c(提交给到线程)等待c完成处理结果...........}问题:在等待线程N结束的过程中,如何实现不卡UI?如果在函数YY中,直接使用ManualResetEve