2011-09-19 9 views
7

Jak obliczyć procent pliku ładowanego w pętli?Obliczanie procentu postępu

Na przykład:

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

`

Jak to zrobić? Z góry dziękuję

+0

Niestety, pole formatu nie jest tutaj wyświetlane. – Kakashi

+0

Naprawiono formatowanie składni. Możesz użyć ikony {}, aby wpisać kod, a jeśli nie działa poprawnie, możesz dodać przed kodem. :) – aevanko

+0

Naprawiono to za Ciebie. – Ikke

Odpowiedz

11

Musiałbyś wiedzieć, jakiej wartości wyjściowej możesz się spodziewać - w przeciwnym wypadku nie będziesz w stanie podać części produkcji, która została już zakończona.

Jeśli wiesz, że to będzie pewna wielkość, można użyć:

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

Zakłada się pasek postępu z minimum zera do maksimum 100 - to również zakłada, że ​​całkowita długość wynosi mniej niż int.MaxValue/100. Inne podejście polega na uczynieniu maksymalnej wartości paska postępu całkowitą długością i ustawieniem wartości paska postępu na builder.Length.

Nadal musisz znać ogólną długość, zanim zaczniesz, w przeciwnym razie nie będzie możliwe podanie postępu w proporcji.

+0

+1 dzięki za odpowiedź, był pomocny również dla mnie. , ale dlaczego nie używać konkatenacji ciągów w pętli? –

+1

@ Maska: zobacz http://www.yoda.arachsys.com/csharp/stringbuilder.html –