zoukankan      html  css  js  c++  java
  • 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();
        }

    }
  • 相关阅读:
    CDQ
    MySQL中的类Decode用法
    HTMLTestRunner生成空白resault.html
    参数化时按行读取txt文件,如何去掉换行符" "
    打开本地html的一些设置
    python中文乱码例子
    Python异常处理实例
    Python根据上下限生成不重复随机数1
    Linux自定义命令
    Python IDLE 清屏工具
  • 原文地址:https://www.cnblogs.com/hcfalan/p/502730.html
Copyright © 2011-2022 走看看