【问题标题】:Progressbar not hitting 100% when expected进度条未按预期达到 100%
【发布时间】:2014-01-17 21:56:41
【问题描述】:

我正在使用后台线程来运行我在标签上使用的秒表并增加进度条。计时器似乎准确地保持时间,但进度条没有达到我预期的 100%。

我正在尝试同时使用 35 秒,但在接近 36 秒时达到 100%,谁能告诉我为什么?

进度条最大值设置为350,值设置为0。

private int currentScore = 0;

Stopwatch swTimer = new Stopwatch();

private void backgroundWorkerTimer_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    TimeSpan elapsedTime = swTimer.Elapsed;
    labelTime.Text = String.Format("{0}.{1:%f}", elapsedTime.Seconds, elapsedTime);
    progressBarTimer.Increment(1);
}

private void backgroundWorkerTimer_DoWork(object sender, DoWorkEventArgs e)
{
    while (true)
    {
        backgroundWorkerTimer.ReportProgress(0);
        System.Threading.Thread.Sleep(100);
    }            
}

【问题讨论】:

  • 不清楚,你想让进度条在 35 秒后满吗?几秒钟后你就吃饱了?
  • 是的,我希望它在 35 秒后充满,当它达到 100% 时,它接近 36。
  • 我认为这是可以预料的。 Windows 不是实时操作系统,每次调用 ReportProgress 时都会进行线程切换。性能密集型操作,因此会丢失几毫秒,并且您可以观察到行为。不是该领域的专家,所以我可能被证明是错误的
  • 不完全是史蒂夫。 Thread.Sleep 很可能是您的问题。该方法应该使您的线程停止运行至少 1000 毫秒,但它可以无限延迟执行多长时间。对于定期调用方法,您应该使用计时器。
  • labelTime 标签正在准确更新,并且在同一个地方被调用?

标签: c# progress-bar backgroundworker stopwatch


【解决方案1】:

这似乎已经干涸,所以我会关闭它。我最终将progressBar max 设为345,它似乎在大约35 秒时结束,无论如何我只是将它用于视觉表示剩余时间。

想知道为什么当 labelTime 跟上时,为什么最大值 350 并不准确。

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多