2011-09-19 349 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 –