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

最最近写了一个WinForm应用程序的版本升级器,测试发现没有新版本时升级器界面会一闪而过(闪屏),用户体验不好,于是想怎么解决这个问题。

升级器主要代码如下:

 代码如下 复制代码

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //1.检测版本
            bool havNewVer = CheckNewVer();
            //2.程序升级
            if (havNewVer && MessageBox.Show("发现新版本:3.0,是否更新?", "更新", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                //todo
            }
            //3.退出应用程序
            Application.Exit();
        }

        /// <summary>
        /// 检测新版本
        /// </summary>
        /// <returns></returns>
        private bool CheckNewVer()
        {
            return false;
        }
    }
}

开始的思路是先把窗体隐藏起来,等确认升级时再显示窗体,修改,测试可以解决闪屏问题[1]:

 

 代码如下 复制代码

private void Form1_Load(object sender, EventArgs e)
{
    //1.检测版本
    bool havNewVer = CheckNewVer();
    //2.程序升级
    if (havNewVer && MessageBox.Show("发现新版本:3.0,是否更新?", "更新", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
    {
        //显示窗体(先在设计器设置窗体属性WindowState=Minimized,ShowInTaskbar=false)
        this.WindowState = FormWindowState.Normal;
        this.ShowInTaskbar = true;

        //todo
    }
    //3.退出应用程序
    Application.Exit();
}

还有没有其他解决方法?经分析,检测版本和From1窗体没什么关系,要是能先检测版本,确认升级时再初始化显示Form1窗体逻辑上更恰当,肯定也能解决闪屏问题,可以这么实现吗?可以,把检测过程移到应用程序入口函数即可,修改后的Program.cs如下:

 代码如下 复制代码

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(params string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            //1.检测版本
            bool havNewVer = CheckNewVer();
            //2.程序升级
            if (havNewVer && MessageBox.Show("发现新版本:3.0,是否更新?", "更新", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                Application.Run(new Form1());
            }
        }

        /// <summary>
        /// 检测新版本
        /// </summary>
        /// <returns></returns>
        static bool CheckNewVer()
        {
            return false;
        }
    }
}

这么改还有一个优点:完美解决了应用程序旧版本参数传入问题(从Main函数参数传入)。

补充说明

[1].在Form1_Load设置窗体属性this.Visible = false;或调用方法this.Hide();不能隐藏窗体;

时间: 2024-09-30 03:43:49

asp.net中WinForm版本升级器闪屏优化过程分享的相关文章

求解决办法-arm中mplayer播放视频闪屏问题怎么解决

问题描述 arm中mplayer播放视频闪屏问题怎么解决 视频播放正常,但是周围只要不是视频区域都是不停的在闪.要怎么做才能让它只在视频区域播放,不影响周围的显示呢 解决方案 http://www.zhihu.com/question/35489425

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

先来张图片 请稍候的窗体就是我要说的闪屏了 实现这个效果有很多种办法 1  Application.Idle +=new EventHandler(Application_Idle); 2  异步执行方法 3  异步线程 我用的第三种 1先做一个闪屏窗体    你在上图中看到的闪屏用到了第三方控件名字叫:DevExpress 2写一个公开的方法显示闪屏 Code        /// <summary>        /// 显示闪屏        /// </summary>  

asp.net中Winform开发框架之数据即时更新的实现

在开篇之前,首先介绍一下Winform开发框架中的界面层的继承关系,首先我把所有窗体区分为三类,一类是普通的窗体,一类编辑窗体,还有一类是列表显示窗体.窗体的集成可以封装处理很多东西,良好的封装和继承,可以为我们提高效率,减少重复代码,它的作用不再在此讨论和强调. 采用窗体继承,极大程度上统一了界面,并且对常用的界面操作,提供了良好的封装,如基础数据编辑.新增窗体积累封装了对回车.方向键.数据刷新.异常处理.数据检查.数据保存.数据更新等接口,为窗体的数据处理提供了很大的方便性. 而数据查询显示

asp.net中WinForm窗体属性默认值更改的教程

每次新建WinForm应用程序项目后,第一件事就是修改Form1窗体FormBorderStyle.MaximizeBox和StartPosition三个属性值,有没有办法创建项目时自动修改好这些属性值呢?Form类没办法修改,自定义控件太麻烦,退而求其次,只要在创建项目时能在Form1.Designer.cs文件自动添加下边三句代码就可以了:  代码如下 复制代码 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed

asp.net中WinForm中TextBox的几个基本技巧

1  一些常用属性  代码如下 复制代码 this.textBox5.PasswordChar = '@';  //密码的样式             this.textBox5.UseSystemPasswordChar = true; //如果这个属性为true,则密码就和系统默认的密码样式相同,而PasswordChar属性不起作用.             this.textBox5.Multiline = true;   //多行显示             this.textBox5

asp.net 中WinForm出现无法处理的异常解决办法

,然后进行处理,但是这段代码中用到了BeginInvoke的语句块,而我使用了匿名方法,那么在匿名方法中的异常,外面是捕捉不到的.所以会出现无法处理的异常情况,正确的代码应该这样:  代码如下 复制代码 this.BeginInvoke(new MethodInvoker(delegate() {     bool flag = false;     try     {         flag = service.Authentication();//此处可能造成异常         if (

asp.net中WinForm分多页打印示例

示例  代码如下 复制代码 using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         private PrintDocument printDocument1; //PrintDocumen

asp.net 中winform防止被调用的实现方法

   代码如下 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Diagnostics; using System.Management; namespace 不允许外部调用 {     static class Program     {         /// <summary>         /// 应用程序的

asp.net中WinForm使用单例模式示例

例如在Windows应用程序中用下面代码打开一个窗体:  代码如下 复制代码 private void button1_Click(object sender, EventArgs e) {     (new About()).Show(); } 其结果是每点一次按钮都会打开一个窗体,最后可能是这样: 这显然这我不是我们想要的,正常应该是点击按钮时判断窗体有没有打开过,有打开过显示激活窗体,没有则创建并打开窗体,对代码稍做修改:    代码如下 复制代码 private void button1