Tja, ich würde sagen überflüssig
laut Windows-Styleguide soll eine progressbar angezeigt werden, sobald etwas länger als 2 Sekunden dauert. Keine Ahnung was du so speicherst, aber "Text in Datei" dürfte eigentlich nie so lange dauern.
Wenn du natürlich unbedingt eine progressbar zeigen möchtest, würde ich vorschlagen
1. Text in Datei speichern, Progressbar.Max auf 20.
2. Einen Timer starten, der alle 100ms auslöst.
3. Im Timer die Progressbar weitersetzen.
Oder wenn man wirklich beim Speichern zugucken soll:
1. Progressbar.Max auf Anzahl der Zeilen, textbox auf readonly, Index auf 0
2. Einen Timer starten, der alle 100ms auslöst.
3. Im Timer die Progressbar weitersetzen und Zeile Nr.
Index speichern. Wenn alles gespeichert ist, Progressbar zurücksetzen und die Textbox wieder editierbar machen.
Du siehst, alle meine Ideen basieren darauf den Speichervorgang künstlich in die Länge zu ziehen
Es gibt leider keine Allgemeine Lösung, man muss sich immer das problem angucken. Zum Beispiel hatte mal so eine Lösung:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void DisplayProgress(int currentdigit) { status_lbl.Text = "Berechnung läuft...";
double progress = (double)currentdigit / _digits; progress = 2 * progress - progress * progress; var remainingTime = (1 / progress - 1) * sw.ElapsedMilliseconds / 1000d;
progress_lbl.Text = string.Format("Geschätze Restzeit: {0:0} Sekunden", remainingTime); progressBar1.Value = progress; } |
Da die Berechnung den Fortschritt nicht linear gemacht hat, habe ich durch das quadrieren erreicht dass die Fortschrittsleiste einigermaßen linear lief und die Restzeit ebenfalls sehr genau geschätzt wurde.