public class WorkingBar { private ProgressBar bar; public WorkingBar(ref ProgressBar bar) { this.bar = bar; this.bar.Minimum = 0; this.bar.Maximum = 100; } public void Perform(float value, float total) { bar.Value = value / total * 100f; } }
private WorkingBar bar; private char[] buffer; private StringBuilder result; public FileReader(ref ProgressBar bar, int bufferSize) { bar = new WorkingBar(ref bar); buffer = new char[bufferSize]; result = new StringBuilder(); } public void Read(string file) { using(StreamReader reader = new StreamReader(file)) { int currentIndex = 0; // Tant que l'on est pas à la fin du fichier while(!reader.EndOfStream) { // Remplit le buffer reader.Read(buffer, currentIndex, buffer.Length); result.Append(buffer); currentIndex += buffer.Length; // Nouvelle valeur de progression bar.Perform((float)currentIndex, (float)reader.BaseStream.Length); Application.DoEvents(); // Pause le thread histoire de faire croire que l'on lit un très gros fichier Thread.Sleep(100); } reader.Close(); } }