Entwickler-Ecke
WinForms - Progressbar auf die Arbeitzeit füllen
Vegeto - Fr 08.03.13 10:20
Titel: Progressbar auf die Arbeitzeit füllen
Hallo.
Ich bin gerade dabei eine progressbar in meine Anwendung einzubauen.Doch ich komme einfach nicht weiter.
Im Internet finde ich diverse Tutorials, doch hier werden die Progressbars mit Zeit aufgefüllt, sprich in 10 sek soll die Progressbar voll sein (oder einstellbar).
Doch ich möchte das er mir genau auf die Arbeit die er macht, die Prograssbar auffüllt.
Ich habe etliche tutorials gefunden die zeigen, wie es mit schleifen geht.
Ich habe aber nichts gefunden, das mir mein problem in einer hinsicht ähnelt.
Ich hoffe einer von euch weiß wo von ich spreche :)
Lg
jfheins - Fr 08.03.13 11:15
Tja dann musst du deine Arbeit in kleine Häppchen aufteilen und nach jedem Häppchen die Fortschrittsleiste aktualisieren.
Wie du das anstellen sollst, können wir dir nur sagen, wenn du uns deine Arbeit zeigt oder beschreibst :P
Vegeto - Fr 08.03.13 11:46
Also ich möchte die Thematik in alles meinen Anwendung verwenden und nicht alle Anwendungen machen das selbe xD
Nunja momentan bin ich an so einem kleinen Editor drann, meine WinApp besteht aus einem Textbox(multiLine) und einem Button, sobald man auf dem Button klickt, wird der inhalt der Textbox in eine TextDatei beschrieben und um den Fortschritt zusehen, wie lange das speichern dauert soll mir die progressbar anzeigen.
lg
jfheins - Fr 08.03.13 12:45
Tja, ich würde sagen überflüssig :lol:
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.
:mrgreen:
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 :lol:
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.
Vegeto - Fr 08.03.13 12:56
Hi jfheins,
Danke für deine Antwort, ich werde versuchen Sie umzusetzen :)
Also das mit Text in Datei speichern, war nur ein Beispiel, es gibt auch längere Arbeiten wie zum Beispiel Daten aus Excel in eine Datenbank speicher etc und bei diesen Arbeiten dauert es nunmal lange und ich möchte das der Nutzer zieht, das die Anwenung arbeitet und nicht hängen geblieben ist.
Danke ich versuche mich mal ran, bei irgendwelchen problemen melde ich mich.
Lg
Ralf Jansen - Fr 08.03.13 14:18
Die gute alte Zeit wo dem User eine Sanduhr (kreisende Punkte etc.) reichte wenn man nichts genaueres wußte sind wohl vorbei ;) Es braucht nun gefaktes Feedback das Kontrolle vortäuscht aber natürlich auch nicht mehr Aussagekraft hat.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!