Entwickler-Ecke
WinForms - Progressbar als Fortschrittsanzeige eines Prozesses
BennyM85 - Mi 18.03.09 13:13
Titel: Progressbar als Fortschrittsanzeige eines Prozesses
Hallo Leute,
ich hab jetzt ne Weile im Netz und auch bei MS geguckt, aber für mich nichts richtig brauchbares gefunden.
Ich möchte gerne Programme installieren nach Aufruf eines Buttons (funktioniert schon) und dann die Prozessbar aktualisieren, dass er mir sozusagen anzeigt wieviel Prozent er vom gesamten Programmeinstallieren schon fertig hat.
hier ist die Installfunktion
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void install(string programm, string parameter) { lblStatus.Visible = true; string myProgramsPath = Application.StartupPath; proc.StartInfo.FileName = myProgramsPath + "\\" + programm; proc.StartInfo.Arguments = parameter; proc.StartInfo.CreateNoWindow = true; proc.Start(); installed++; progressBar1.Value = (100 * installed) / anzahl; progressBar1.Update(); lblProzent.Text = progressBar1.Value.ToString("00")+"%"; proc.WaitForExit(); } |
ich übergebe ihm eine exe datei und die parameter, wie gesagt installieren geht,
danach starte ich die Installation des Programms über proc.Start() und zähle die Anzahl der installierten Programme (installed++) eins hoch
nur mit den zwei zeilen mit der progressbar weiß ich nicht wie ich das global lassen laufen kann. stimmt die Berechnung?
Anzahl ist die Anzahl der zu installierenden Programme.
Ein weiteres Problem ist noch, dass während die Programme nacheinander installiert werden, ich nicht mehr ordentlich auf die GUI zugreifen kann, bzw. wenn ich ein Installationsfenster verschiebe während der installation, dann bleibt wird die GUI mit dem Installationsfenster weiterhin übermalt, sodass diese nicht vernünftig ausschaut.
Ich kann ja falls gewünscht einen Screenshot davon reinstellen....
Ich hoffe ihr könnt mir helfen.
LG Benny
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Dave86 - Mi 18.03.09 13:18
Hi Benny.
Zum Thema dass die GUI hängen bleibt, dass liegt wahrscheinlich daran, dass du die Installationsroutine nicht in einem eigenen Thread laufen lässt, wodruch der GUI Thread dann solange blockiert ist, bis deine Funktion alle Programme installiert hat.
Das mit dem global laufen lassen versteh ich noch nicht ganz...
Grüße
Dave
BennyM85 - Mi 18.03.09 13:30
Also das mit den Threads ist eine gute Idee... das müsst ich mal so lösen
jetzt zu den Programmen:
ich hab ne oberfläche gebastelt mit checkboxen wo man ankreuzen kann, was alles installiert werden soll.
ich lass ihn dann zusammenzählen wieviele programme installiert werden und fange dann an diese zu installiern.
angenommen ich installiere jetzt 10 Programme dann möchte ich dass er nach jeder Programminstallation den fortschrittsbalken um 10 Prozent erhöht. für diesen fall wäre einfach; jetzt ist die anzahl der zu installierenden Programme ja dynamisch.
ist die formel richtig: (anzahl schon installierter Programme / Anzahl zu installierende Programme) * 100
Muss die Progressbar auch im eigenen Thread laufen?
Dave86 - Mi 18.03.09 13:36
Hi Benny.
Schau dir mal die Eigenschaften des Progressbar an, da gib es eine MinValue und MaxValue eigenschaft.
Das einfachste ist du sagst zu beginn
C#-Quelltext
1:
| progressbar.Maximum = anzahl_install_programme; |
und bei jedem durchlauf
das funktioniert aber nur wenn der Progressbar auch im gleichen Thread läuft.
Wenn du deine Installationsroutine in einen eigenen Thread laufen lässt, musst du mit delegates arbeiten
Hoffe ich konnte weiterhelfen.
Grüße
Dave
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Kha - Mi 18.03.09 13:44
@BennyM85: Schau dir mal die BackgroundWorker-Klasse an, dein Problem ist quasi das Paradebeispiel für ihre Benutzung.
BennyM85 - Mi 18.03.09 14:37
thx, das war des rätsels lösung^^
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!