7

我通过在运行我的主表单之前立即启动一个新线程来显示一个启动表单。

在此线程运行的方法中,我使用 Application.Run,​​如下面的选项 1 所示。这是这样做的正确方法,还是有问题在等着我,因为我已经调用了 Application.Run 两次?另一种选择是选项 2,如下所示,我调用 .ShowDialog() 来显示表单。

启动表单本身会在指定时间后关闭,由表单本身控制,这两个选项似乎都运行良好。

所以我的问题是:哪个是首选 - 选项 1 或选项 2?如果你能给出其中一个或另一个的具体原因,那就太好了。

谢谢。

主要片段:

// Run splash screen thread.
Thread splash = new Thread(new ThreadStart(ShowSplash));
splash.Start();

// Run main application.
Application.Run(new MainForm());

显示初始表单选项 1:

    static void ShowSplash()
    {
        Application.Run(new SplashForm());
    }

显示启动表单选项 2:

    static void ShowSplash()
    {
        using (SplashForm splash = new SplashForm())
        {
            splash.ShowDialog();
        }
    }
4

2 回答 2

3

选项 2 可能会遇到麻烦,因为那时您使用的是与 MainForm 相同的 Mesageloop,但来自另一个线程。

选项1很好。

于 2009-11-04T12:59:38.363 回答
1

我意识到这可能是一个不寻常的观点,但您是否考虑过不使用启动屏幕,而是在“欢迎页面”或“帮助 > 关于”屏幕上显示信息?

这样做有几个原因:

  1. 除非您使用多线程,否则如果在其顶部弹出一些警报/消息框,则启动画面可能无法正确重新绘制,从而完全否定了启动画面的好处。

  2. 显示“您已安装插件 x、y 和 z”的启动画面在加载该信息之前无法真正说明这一点。加载此信息时,您的应用程序已准备就绪,因此您要么关闭启动屏幕,要么它会妨碍用户。

  3. 如果我移开视线并错过启动画面,我会错过您告诉我的任何信息。如果“许可证将在 3 天内到期”是该信息的一部分,而今天是星期五,这意味着我不会意识到星期一,我无法使用该应用程序。晦涩难懂,但我见过。

于 2009-11-04T13:09:25.120 回答