计算进度百分比

时间:2011-09-19 06:13:56

标签: c# .net file progress-bar

我如何计算在循环中加载的文件的百分比?

例如:

ProcessStartInfo p = new ProcessStartInfo();
Process process = Process.Start(p);
StreamReader sr = process.StandardOutput;
char[] buf = new char[256];
string line = string.Empty;
int count;

while ((count = sr.Read(buf, 0, 256)) > 0)
{
    line += new String(buf, 0, count);
    progressBar.Value = ???
}

`

我是怎么做到的?提前致谢

1 个答案:

答案 0 :(得分:12)

您需要知道预期的最终输出量 - 否则您无法提供已经完成的输出的一部分。

如果你知道它将是一定的尺寸,你可以使用:

// *Don't* use string concatenation in a loop
StringBuilder builder = new StringBuilder();
int count;
while ((count = sr.Read(buf, 0, 256)) > 0)
{
    builder.Append(buf, 0, count);
    progressBar.Value = (100 * builder.Length) / totalSize;
}

这假设进度条的最小值为零,最大值为100 - 它还假设总长度小于int.MaxValue / 100.另一种方法是简单地使进度条最大值为整体长度,并将进度条值设置为builder.Length

在你开始之前,你仍然需要知道整体长度,否则你不可能按比例取得进步。