【问题标题】:WDF Progress bar incrementing by odd number and loopingWDF进度条以奇数递增并循环
【发布时间】:2016-10-20 13:55:00
【问题描述】:

我有一个最小为 0 和最大为 100 的进度条。如果我将它增加 33,它将以 99/100 结束,但是当我循环它时,它会尝试将 33 添加到 99 并且我退出即使我在每次循环后将进度条的值设置回 0,也会出现边界异常。任何人都可以提出解决方案吗?

    private void WorkProgress1(int progress)
    {

       pbProgress.Value = progress;
    }

    private void DoWork()
    {

        if (_progress == 100) { _progress = 0; }
        int Increment = (100 / count);
            _progress += (Increment);
            WorkProgress1(_progress);

    }

【问题讨论】:

  • 如果 _progress 正好是 100,你只将 _progress 设置为 0。99 + 33 不是 100。
  • count 有什么价值?是 3 吗?
  • 您能告诉我一种解决方法吗?计数取决于我有多少物品,所以它可以是任何东西。抱歉,我只是举了一个 3 的例子。我了解该异常可能以不同的计数发生。

标签: c# progress-bar


【解决方案1】:

一个非常简单的解决方案是在将值分配给_progress 之前检查_progress + increment 是否大于100。如果等于或大于100,则将100 发送至WorkProgress1(),并将_progress 发送回0

private void DoWork()
{
   int increment = (100 / count);

   if(_progress + increment >= 100)
   {
      WorkProgress1(100);
      _progress = 0;
   }
   else
   {
      _progress += (increment);
      WorkProgress1(_progress);
   }
}

【讨论】:

  • 如果我的计数是 2,它会在第一个之后将我的进度条提高到 100%,而不是 50% + 50%。
  • 哦,我的错。我更新了我的答案。现在它应该可以工作了。
  • 哈哈谢谢。出于某种原因,当我的计数为 3 时,它不再给我错误,但有时它会增加奇怪.. 也许这是我的代码。
【解决方案2】:

这里是更简洁的 croxy 的解决方案:

private void DoWork()
{
    int increment = (100 / count);
    _progress = Math.Min(100, _progress + increment);
    WorkProgress1(_progress);
    _progress %= 100;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2017-04-29
    相关资源
    最近更新 更多