【问题标题】:How to show a splash screen to kill the time while data is loaded?如何在加载数据时显示启动画面以消磨时间?
【发布时间】:2010-11-21 07:08:24
【问题描述】:

当启动我的应用程序时,我首先必须读取一些数据,必须初始化一些表单等等。 在那段时间里,用户只看到灰色正在准备展示一些东西。

这会持续几秒钟......

我想到了一个启动画面,它可以在单独的线程中加载数据并显示需要多长时间。还是只是一个状态栏?

你会怎么做这样的事情?

我正在使用 C# .NET 3.5 + Winforms

【问题讨论】:

  • @Filip:为什么是“如何在 WinForms 中实现启动画面?”主观的?
  • 应该更改问题标题以反映您的@RichieHindle 的评论,这样看起来就不会那么主观了
  • 您始终可以采用 Flash 游戏的方法,向用户展示一个迷你乒乓球游戏,让他们在加载数据时保持忙碌。不过,对于商业环境来说,这可能不是最好的主意。
  • @Rich:好点 - 完成了。可惜这个问题已经有五个标签了,所以我不能添加我的新主观——如果我不实际阅读问题标签。 8-)

标签: c# winforms progress-bar splash-screen time-wait


【解决方案1】:

请参阅此 CodeProject 文章:A Pretty Good Splash Screen in C#

它实现了一个启动画面:

  • 在单独的线程上运行
  • 出现时淡入,消失时淡出
  • 显示使用静态方法更新的运行状态消息
  • 显示和更新预测性自校准自绘平滑渐变进度条
  • 显示加载完成前剩余的秒数

这是它的外观示例 - 也许您的会更漂亮。 8-)

【讨论】:

  • 我以前看过那个,但不是那么好 - 他使用 DoEvents() 而不是真正的线程,他做了一些 .NET 3.5 中不再允许的非线程保存操作
  • @Kai:你确定吗?我看到了这个:ms_oThread = new Thread( new ThreadStart(SplashScreen.ShowForm));,这对我来说当然看起来像是一个真实的线程。也没有提到DoEvents
  • @Kai:我正在评估 Richie 指出的同一篇文章。向下滚动查看 Mahin Gupta 的其中一位 cmets,他最近重写了一些与 .net3.5 兼容的代码,包括一些线程安全问题。
【解决方案2】:

有了 WindowsForm,Backgroundworker 更容易使用了。

您可以在加载过程中禁用控件,并在启动栏上显示一个进度条,标签为“正在加载数据...”。

MSDN 链接:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

【讨论】:

    【解决方案3】:

    如果只持续几秒钟,则显示等待 光标应该没问题。或许可以这样安排 主窗口尽快显示,其余的 在第一次屏幕更新后开始(例如使用计时器)。 这将减少感知的启动时间。

    为了减少启动时间,您还可以考虑 如果不严格,则推迟一些启动操作 必要的。稍后可以在后台使用 计时器或按需。

    【讨论】:

      【解决方案4】:

      我最近使用 Tom Clements 作为基础编写了一个类似的启动画面。看看My Splash Screen 看看它是否符合您的需求。

      【讨论】:

        猜你喜欢
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 2018-07-16
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        相关资源
        最近更新 更多