splashform 显示 主窗体 正解

下面是部分代码:

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 == null) return;

        if (MySplashForm == null) return;

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

    }

}

  

posted @ 2015-05-09 02:37  学知行者  阅读(343)  评论(0编辑  收藏  举报