Dynamisch eine Progressbar zeichnen lassen
-
Hallo ,
ich wollte mal fragen wie es denn immer jemacht wird, das man die progressbars immer dynamisch mit etwas mitlaufen lässt, zum beispiel wenn eine datei gelesen wird usw. Aber dazu habe ich eine spezifische frage.Wie kann ich es realiseren, dass während die verbindung zu einer Datenbank hergestellt wird eine progressbar so laufen zu lassen, dass sie genau dann fertig ist, wenn die verbindung aufgebaut ist. also das sich die progressbar immer der dauer des verbindens zur datenbank anpasst. wäre über jede hilfe echt dankbar
-
Das wird meistens so gelöst, dass beim Einlesen der Datei zuerst die Dateigröße ermittelt wird. Dann werden eben immer gleichgröße Stücke aus der Datei ausgelesen und die Progressbar gesteppt. Bsp:
Dateigröße: 30256 KB Stückgröße: 4096 KB Überhang = Dateigröße % Stückgröße Schritte = ((Dateigröße - Überhang) / Stückgröße) + 1
Ist eigentlich selbst erklärend. Das Programm wird also (Schritte - 1) mal 4096 KB aus der Datei auslesen. Da allerdings dann immer noch "Überhang" KB in der Datei übrig sind, muss es die natürlich auch noch auslesen, also "Schritte" + 1 (steht schon bei Schritte am Ende). Die Anzahl der Schritte wird der Progressbar mehr oder weniger als Länge angegeben (! nicht die Länge in Pixel !). Jedesmal wenn ein Stück ausgelesen wird, wird die Progressbar um eine Länge weitergesteppt.
Hoffe das ist jetzt halbwegs klar geworden
-
ok super danke die erklärung war schon gut, nur habe ich das problem, das ich eine datenbank habe und keine dateien und da nicht weiß wie ich es machen könnte.
-
das einzige was ich mir dabei vor stellen könnte, wäre eben, wenn die erstellung der verbindung aus mehreren teile besteht, nach jedem teil die progressbar ein stück weiter laufen zu lassen. wenn es jedoch nur ein funktionsaufruf ist, stell ich mir das schwierig wenn nicht sogar unmöglich vor...
-
ok dann habe ich leider pech, denn es ist nicht nur ein funktionsaufruf, sondern es sind nur maximal 3 zeilen code, aber trotzdem danke für deine hilfe
-
naja kannst ja nach jeder zeile code einen aufruf starten, sind dann eben 3 schritte die die pbar m<cht aber ob es sich lohnt und wie es dann aussieht ist eine andere frage^^
-
naja es ist eigentlich ein anderes problem, wenn das programm das erste mal ausgeführt wird, dann dauert es meistens etwas länger ehe die verbindung aufgebaut ist, und um dem benutzer zu zeigen, das das programm nicht abgestürzt ist wollte ich die progressbar mit einbauen. wenn das programm dann einmal ausgeführt hatte, wird die verbindung auch sofort aufgebaut. es sollte halt so laufen fals irgendwie oder irgendwann mal der aufbau der verbindung länger dauert das die progressbar einspringt...
-
Du wirst Dich in diesem Falle dann noch mit Threading auseinander setzen müssen. Wenn Du die Verbindung im Haupthread öffnest, hat dieser keine Zeit den Progressbar zu aktualisieren.
-
naja das kann man ja schlecht vorher wissen, wann sie langsamer ist, das kann ja verschieden gründe haben...aber allgemein würde ich die pbar dann generell einsetzen und nicht nur, wenn es länger dauern könnte.
so mal als kleines beispiel, wie man die pbar steppen lassen könnte. ist allerdings nur pseudo-code, da ich mit C# nicht vertraut bin...... PBar.SetSteps (4); PBar.StepIt (); DoFunction (); //Codezeile 1 PBar.StepIt (); DoFunction (); //Codezeile 2 PBar.StepIt (); DoFunction (); //Codezeile 3 PBar.StepIt (); ...