• Splash Form


    对于需要加载很多组件的应用程序来说,在启动的时候会非常的缓慢,可能会让用户误以为程序已经死掉,这显然不是我们希望看到的。如果能够在启动的时候动态的给用户一些反馈信息(比如当前正在加载的项),那么就可以有效的避免这一问题,并且可以给我们的应用程序增色不少。下边的图片是此代码的效果图。
     
    下面是部分代码:
    AppStart 类,包含Main方法
    public class AppStart
    {
        
    public AppStart()
        
    {
        }

        [STAThread]
        
    static void Main(string[] args)
        
    {
            
    //    显示Splash窗体
            Splash.Show();

            DoStartup(args);

            
    //    关闭Splash窗体
            Splash.Close();
        }


        
    static void DoStartup(string[] args)
        
    {
            
    //    做需要的事情
            frmMain f = new frmMain();
            Application.Run(f);
        }

    }

    Splash功能类:
    public class Splash
    {
        
    static frmSplash MySplashForm = null;
        
    static Thread MySplashThread = null;

        
    static void ShowThread() 
        
    {
            MySplashForm 
    = new frmSplash();
            Application.Run(MySplashForm);
        }


        
    static public void Show() 
        
    {
            
    if (MySplashThread != null)
                
    return;

            MySplashThread 
    = new Thread(new ThreadStart(Splash.ShowThread));
            MySplashThread.IsBackground 
    = true;
            MySplashThread.ApartmentState 
    = ApartmentState.STA;
            MySplashThread.Start();
        }


        
    static public void Close() 
        
    {
            
    if (MySplashThread == nullreturn;
            
    if (MySplashForm == nullreturn;

            
    try 
            
    {
                MySplashForm.Invoke(
    new MethodInvoker(MySplashForm.Close));
            }

            
    catch (Exception) 
            
    {
            }

            MySplashThread 
    = null;
            MySplashForm 
    = null;
        }


        
    static public string Status 
        
    {
            
    set 
            
    {
                
    if (MySplashForm == null
                
    {
                    
    return;
                }


                MySplashForm.StatusInfo 
    = value;
            }

            
    get 
            
    {
                
    if (MySplashForm == null
                
    {
                    
    throw new InvalidOperationException("Splash Form not on screen");
                }

                
    return MySplashForm.StatusInfo;
            }

        }

    }

    Splash 界面类:

    public class frmSplash : System.Windows.Forms.Form
    {
        
    private string _StatusInfo = "";
        
        
    public frmSplash()
        
    {
            InitializeComponent();
        }


        
    private void InitializeComponent()
        
    {
            
    // 
            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));        
            
    //

        }


        
    public string StatusInfo 
        
    {
            
    set 
            
    {
                _StatusInfo 
    = value;
                ChangeStatusText();
            }

            
    get 
            
    {
                
    return _StatusInfo;
            }

        }


        
    public void ChangeStatusText() 
        
    {
            
    try 
            
    {
                
    if (this.InvokeRequired) 
                
    {
                    
    this.Invoke(new MethodInvoker(this.ChangeStatusText));
                    
    return;
                }


                labStatus.Text 
    = _StatusInfo;
            }

            
    catch (Exception e) 
            
    {
                
    //    异常处理
            }

        }

    }


    主界面类:

    public class frmMain : System.Windows.Forms.Form
    {
        
    public frmMain()
        
    {
            InitializeComponent();

        Splash.Status 
    = "状态:载入初始化模块";
                System.Threading.Thread.Sleep(
    1000);
                
        Splash.Status 
    = "状态:载入管理模块";
                System.Threading.Thread.Sleep(
    1000);

        Splash.Status 
    = "状态:载入打印模块";
                System.Threading.Thread.Sleep(
    1000);

        Splash.Status 
    = "状态:载入插件模块";
                System.Threading.Thread.Sleep(
    1000);

        Splash.Status 
    = "状态:连接数据库";
                System.Threading.Thread.Sleep(
    1000);

        Splash.Close();
        }

    }
  • 相关阅读:
    关于在windows10中的vmware9.0里面安装的ubuntukylin15.04和windows共享目录的一些反思
    关于最近工程的一些心得
    关于springMVC中component-scan的问题以及springmvc.xml整理
    初学node.js有感三
    初学node.js有感二
    初学node.js有感一
    编译原理——算符优先分析文法(附源代码)
    数据结构与算法系列研究九——排序算法的一些探讨
    LeetCode: Same Tree
    LeetCode: Symmetric Tree
  • 原文地址:https://www.cnblogs.com/hcfalan/p/502730.html
Copyright © 2020-2023  润新知