2012-08-24 148 views
0

我有一个进度条,最小值= 0和最大值= 1000。 现在我有很长的FileSize = 1454545454和long BytesSent(示例)。如何计算进度条位置?我总是失去精确度或者东西:/进度条和百分数

编辑: 解决了......我忘了投入像:(十进制)BytesSent。你们做了同样的事:P Thx寻求答案。 Debbuger总是有帮助的。

+0

这是WPF或Winforms的问题? –

+1

数学问题。只需要一个公式,我很累,我想不出:/ – zgnilec

+0

也考虑设置最大文件大小,然后进度将BytesSent – dvvrd

回答

6
progressBar.Value = (int)(
    progressBar.Minimum + ((double)BytesSent/FileSize) * 
          (progressBar.Maximum - progressBar.Minimum)); 

或者:

progressBar.Minimum = 0; 
progressBar.Maximum = FileSize; 
progressBar.Value = BytesSent; 
3

的进度条是不是精密仪器 - 这是一个进步的近似显示(即使你表现出确切值,这可能会是一个不正确真实进展的表示)。

所以,你应该简单地做:

progressBar.Minimum = 0; 
progressBar.Maximum = 100; 

progressBar.Value = (BytesSent/FileSize) * progressBar.Maximum; 

MSDN page就是为什么我不会理会使用更精确的值:通过显示

值ProgressBar仅接近Value属性的当前值。