Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 08.03.13 10:20 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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:
ausblenden 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; // Quadratisches Laufzeitverhalten kompensieren
            
            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.

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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
DavidD
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 08.03.13 14:14 
Für sowas kann man auch alternativ einen Splash Screen verwenden.
www.codeproject.com/...d-Splash-Screen-in-C

Wahlweise kannst du auch einfach auf irgendein Gif wie die Windows Sanduhr zurückgreifen und anzeigen wenn sich die Art der Arbeit nicht wirklich einteilen lässt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.