【问题标题】:C# - Display loading 1-100% within 4 secondsC# - 显示在 4 秒内加载 1-100%
【发布时间】:2009-10-21 23:56:41
【问题描述】:

我在启动画面上有一个标签,它显示了 4 秒。我正在尝试使标签以百分比形式显示加载过程。显然,这只是为了向用户显示程序实际上正在启动,而不是实际“加载”任何东西。有没有办法让标签在 4 秒内显示百分比(从 1% 到 100%)?如何做到这一点有点迷失。

【问题讨论】:

  • 但这不取决于计算机的性能吗?我的意思是即使您的初始屏幕显示“已完成”,因为您使用的是固定时间,但您的主表单可能不会在那个时候完成。
  • 好吧,实际上在当前的快速计算机中不太可能发生这种情况。

标签: c# label loading splash-screen


【解决方案1】:

在窗体上放置一个 Timer 控件,并将其 Interval 属性设置为 40,并将其 Enabled 属性设置为 true。像这样创建一个表单级变量:

private int _Progress = 0;

在 Timer's Tick 事件中,输入以下代码:

if (_Progress < 100)
{
    _Progress++;
    label1.Text = _Progress.ToString() + "%";
}
else
{
    timer1.Enabled = false;
}

计时器并不是真正精确到毫秒,所以这不会完全花费 4 秒,但它会完成这项工作。

【讨论】:

  • 问题是您的解决方案需要程序正在运行,并且他想要显示程序正在加载的东西,而实际上它正在启动。
  • @James:认真的?在非托管 C++ 中做一个闪屏?当你在老鼠身上使用榴弹炮时,它们往往会弄得一团糟。 :)
  • @James,我以为 Nate 想要一个“装饰性”的进度文本,而不是幕后真正的加载。
  • 我说“锁定”启动画面,直到计时器滴答完成 4 秒(或大约)。
  • @Nate:我认为o.k.w. 只是意味着在其_Progress 变量达到100 之前不允许关闭初始屏幕。您可以使用公共属性公开_Progress,然后让任何代码关闭启动表单,只需循环检查此属性(使用DoEvents()Thread.Sleep(x)),直到达到 100,然后然后关闭启动表单。
【解决方案2】:

假设您说的是 WinForms(不是 WPF),最简单的方法是使用计时器控件。将超时设置为 40 毫秒(4 秒 = 4000 毫秒。4000 毫秒/100 次更新 = 40 毫秒)。创建一个类级整数以跟踪进度。然后您的 OnTick 事件代码将如下所示...

if(progress < 100)
{
  progress++;
  progessLabel.Text = String.Format("Loading...  Progress: {0}%", progress);
}
else
{
  timer.Enabled = false;
}

【讨论】:

  • 又是似曾相识了!
【解决方案3】:

间隔设置为 100 毫秒的计时器是最简单的方法。记录计时器事件被调用的次数,并在每次滴答时将进度条更新 2.5%。

虽然这可行,但我想说进度条不适合这种情况。相反,只是一个动画图形会更好,因为它表明您的程序正在启动,但不会像进度条那样误导。

我认为微软经常犯这样的错误,即在某些应用程序中使用误导性的进度条。

【讨论】:

  • Netscape 曾经使用进度条来执行此操作,该进度条会一直向右移动,然后转身并开始向左移动,依此类推,只要加载时间(其中通常是 90 年代的几个小时)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多