做Splash Screen的更好方法

时间:2016-06-28 04:34:19

标签: c# winforms splash-screen animated-gif

此刻我得到了这个

更新:感谢所有答案。

 private void Form1_Load(object sender, EventArgs e)
    {
        //hide() doesnt help
        Thread init = new Thread(InitApplication);
        init.IsBackground = true;
        init.Start();
    }

InitApplication至少需要5秒以上才能完成并写入所有设置。我希望我的splashScreen在此之前保持不变。

增加:

    private readonly SplashScreen _splash;
    public Form1(SplashScreen splashy)
    {
        _splash = splashy;
        InitializeComponent();
    }

我得到了

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        SplashScreen splashy = new SplashScreen();
        splashy.Show();
        Application.DoEvents();
        Application.Run(new Form1(splashy));
    }

它正在做它想要做的事情,但是,现在我在splashform上看到form1。我在哪里可以添加hide和show方法,这样只有完全加载时才显示启动画面和form1弹出窗口。

2 个答案:

答案 0 :(得分:1)

尝试从UI线程加载启动画面,然后使用后台工作程序执行InitApplication()。后台工作程序可以将进度传达给UI线程。

BackgroundWorker Class on MSDN

  

BackgroundWorker类允许您在单独的专用线程上运行操作。下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时停止响应。当您需要响应式UI并且您遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案。

答案 1 :(得分:1)

您可以使用Async Await,后台工作程序或线程来初始化您的应用程序等。这些是按照易于使用的顺序编写的,并遵循一般模式。

使用普通的Windows窗体,然后使用进度条,gif图像等。在表单加载或表单显示事件启动后台任务,完成后,关闭正常表单并加载主申请表。

如果您的InitApplication有任何涉及GUI的调用,您将不得不更改该调用并在GUI线程上调用所需的操作。