当步骤是任意的时,更新进度条

时间:2013-09-19 08:48:39

标签: c# floating-point int progress-bar

我正在编写一个C#应用程序,我在其中处理文件中的行。该文件可能有2行,30,80,可能超过一百行。

这些行存储在列表中,因此我可以从myFileList.Count获取行数。进度条只需要int作为值的参数,所以如果我的行号为50,我可以很容易地做到

int steps = 100/myFileList.Count 
progress += steps; 
updateProgressBar ( progress );

但是如果我的文件说61行:100/61 = 1,64,那么int steps将等于1,我的进度条将停止在61%。我该怎么做才能正确?

3 个答案:

答案 0 :(得分:5)

我假设您正在使用System.Windows.Forms.ProgressBar

只需将Maximum字段的值设置为行数,而不是尝试计算进度百分比。然后,您可以将值设置为您所在的行号,并自动将其转换为合适的百分比。

// At some point when you start your computation:
pBar.Maximum = myFileList.Count;

// Whenever you want to update the progress:
pBar.Value = progress;

// Alternatively you can increment the progress by the number of lines processed
// since last update:
pBar.Increment(dLines);

答案 1 :(得分:2)

假设您正在使用WinForms应用程序

为什么你在这里使用100?

ProgressBar有一个Maximum属性,您可以将其设置为总分数

e.g。

ProgressBar1.Maximum = myFileList.Count;

然后在循环中你可以像这样做一个技巧

ProgressBar1.value =0;
for(int i=0;i<myFileList.Count;i++){

 //your code here

 ProgressBar1.value++;
}

就是这样!

答案 2 :(得分:1)

progress定义为double并更改代码:

double steps = 100d/myFileList.Count;
progress += steps; 
updateProgressBar ((int) progress );