启动画面显示方法最佳实践C#

时间:2009-11-04 12:45:24

标签: c# winforms multithreading splash-screen

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

在这个线程运行的方法中,我正在使用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();
        }
    }

3 个答案:

答案 0 :(得分:3)

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

选项1没问题。

答案 1 :(得分:3)

Splash Screen waiting until thread finishes

查看评分最高的答案

答案 2 :(得分:1)

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

有几个原因可以做到这一点:

  1. 除非你进入多线程,否则如果某个警报/ msgbox突然出现在其上方,则启动画面可能无法正确重新绘制,从而完全否定了启动画面的好处。

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

  3. 如果我把目光移开并错过了闪屏,我会错过你告诉我的任何信息。如果“许可证在3天后到期”是该信息的一部分,今天是星期五,这意味着我不会在星期一意识到,我无法使用该应用程序。晦涩难懂,但我已经看过了。