【问题标题】:Better way of doing Splash Screen做启动画面的更好方法
【发布时间】:2016-06-28 04:34:19
【问题描述】:

当时我得到了这个

更新:感谢所有答案。

 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 弹出窗口。

【问题讨论】:

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


【解决方案1】:

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

BackgroundWorker Class on MSDN

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

【讨论】:

    【解决方案2】:

    您可以使用 Async Await、Background worker 或 Thread 来初始化您的应用程序等。这些都是按照易于使用和遵循的一般模式的顺序编写的。

    使用普通的 Windows 窗体,并使用进度条、gif 图像等您最喜欢的内容。在表单加载或表单显示事件上启动后台任务,完成后关闭普通表单并加载您的主应用程序表单。

    如果您的 InitApplication 有任何处理 GUI 的调用,则必须更改该调用并在 GUI 线程上调用所需的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多