2016-10-20 26 views
0

我有一个最小值为0,最大值为100的进度条。如果我将它增加33,它将以99/100结尾,但是当我循环时它会尝试添加33到99,即使我在每个循环之后将进度条的值设置回0,我也会得到“界外”异常。任何人都可以提出解决方案吗?WDF进度条通过奇数和循环递增

private void WorkProgress1(int progress) 
    { 

     pbProgress.Value = progress; 
    } 

    private void DoWork() 
    { 

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

    } 
+1

只设置了'_progress'为0;如果'_progress'正是100 99 + 33不是100 –

+0

什么价值'count'有?是3吗? –

+0

你能告诉我一种方法,我可以解决它吗?计数取决于我有多少物品,所以它可能是任何东西。我只是举了一个3的例子,虽然对不起。我知道这个例外可能会发生在不同的计数上。 –

回答

1

一个非常简单的解决办法是将值分配给_progress前检查,如果_progress + increment超过100。如果它等于或大于100则发送100WorkProgress1()并将_progress返回0

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

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

谢谢!我不知道为什么我不能想到这个..没有睡觉.. –

+0

如果我的计数是2,它会在第一次射击后将我的Progess酒吧发射到100%,而不是做50%+ 50%。 –

+0

哦,我的错误。我更新了我的答案。现在它应该工作。 – croxy

1

这里是更紧凑croxy的解决方案:

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