2011-09-19 316 views
7

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

例如:

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 = ??? 
} 

`

我如何做到这一点?在此先感谢

+0

对不起,格式框,不显示在这里。 – Kakashi

+0

修复语法格式。您可以使用{}图标输入代码,如果代码不正常,可以在代码前添加<! - language:c# - >。 :) – aevanko

+0

修复它为你。 – Ikke

回答

11

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

如果你知道这将是具有一定规模,你可以使用:

// *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; 
} 

这是假定与最小值0,最大值为100的进度条 - 这也假定总长度小于int.MaxValue/100.另一种方法是简单地将进度条的最大值设置为总长度,并将进度栏值设置为builder.Length

虽然在开始之前您仍然需要知道总体长度,否则您无法按比例提供进度。

+0

+1 感谢您的回复,对我也有帮助。 但为什么不在循环中使用字符串连接? –

+1

@ The Mask:请参阅http://www.yoda.arachsys.com/csharp/stringbuilder.html –