2011-09-19 56 views
7

Tôi tính phần trăm của tệp đang tải trong vòng lặp như thế nào?Tính tỷ lệ phần trăm tiến độ

Ví dụ:

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

'

Làm thế nào tôi làm điều này? Cảm ơn trước

+0

xin lỗi, hộp định dạng, không được hiển thị ở đây. – Kakashi

+0

Định dạng cú pháp cố định. Bạn có thể sử dụng biểu tượng {} để nhập mã và nếu nó không hoạt động đúng, bạn có thể thêm trước mã. :) – aevanko

+0

Đã sửa lỗi cho bạn. – Ikke

Trả lời

11

Bạn cần phải biết số lượng đầu ra cuối cùng mong đợi - nếu không bạn không có cách nào cho tỷ lệ đầu ra đã được hoàn thành.

Nếu bạn biết nó sẽ là một kích thước nhất định, bạn có thể sử dụng:

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

này giả định một thanh tiến trình với tối thiểu là zero và tối đa là 100 - nó cũng giả định rằng chiều dài tổng thể là ít hơn int.MaxValue/100. Một cách tiếp cận khác chỉ đơn giản là làm cho thanh tiến trình tối đa có giá trị chiều dài tổng thể và đặt giá trị thanh tiến trình thành builder.Length.

Bạn vẫn sẽ cần biết chiều dài tổng thể trước khi bắt đầu, nếu không bạn không thể tiến bộ theo tỷ lệ.

+0

+1 cảm ơn câu trả lời của bạn, cũng hữu ích cho tôi. nhưng tại sao không sử dụng nối chuỗi trong một vòng lặp? –

+1

@ Mặt nạ: Xem http://www.yoda.arachsys.com/csharp/stringbuilder.html –

Các vấn đề liên quan