Little Painter Step by Step-Day 9

来源:互联网 发布:淘宝照片尺寸规格 编辑:程序博客网 时间:2024/06/05 18:40
 

第九天:(目标:SplashForm

今天我们要做的是给程序添加一个SplashForm,因为如果程序的启动需要loadcomponent比较多,我们就需要让主窗口被show出来之前处理这些load的动作,但是这段时间我们需要让用户知道程序已经开始在启动,这就是需要SplashForm的原因。

SplashForm的特点是,它是一个没有标题栏的窗口,一般显示一幅图片。因此我们可以在App工程中添加一个SplashForm,它继承自FormBorderStyleNone,拥有一副背景图,并显示在屏幕中央。

LittlePainterStepbyStepApp中,我们会开启一个线程来显示SplashForm,并做内核初始化的工作,代码如下:

class LittlePainterStepbyStepApp

    {

        /// <summary>

        /// Enter point of the program

        /// </summary>

        [STAThread]

        public static void Main()

        {

            Application.EnableVisualStyles();

            LittlePainterStepbyStepApp app = new LittlePainterStepbyStepApp();

 

            Thread startupThread = new Thread(new ThreadStart(app.Initialize));

            startupThread.Start();

            startupThread.Join();

 

            ApplicationForm appForm = new ApplicationForm();

            Application.Run(appForm);

        }

 

        private void Initialize()

        {

            try

            {

                m_SplashForm = new SplashForm();

                m_SplashForm.Show();

 

                CoreImplementation core = new CoreImplementation();

                core.Init();

 

                Core.CoreImplement = (ICore)core;

 

                m_SplashForm.Close();

            }

            catch

            {

                m_SplashForm.Dispose();

                m_SplashForm = null;

                Application.Exit();

            }

        }

 

        private SplashForm m_SplashForm;

startupThread.Join()保证了我们开启的这个线程执行完毕后,主线程才继续运行

当内核初始化时发生了异常,我们就直接退出。

这里还有一个问题,就是当SplashForm关闭后,主窗口并没有显示出来。我们需要给ApplicationForm添加一句

protected override void OnLoad(EventArgs e)

        {

            base.OnLoad(e);

            this.Activate(); // Active main window

            InitializeControls();

        }

就完成了。

原创粉丝点击