Benutzer mit den meisten Antworten
ProgressBar in Marquee style does not work

Frage
-
Hello,
i have a program with a GUI, which copies data. If the user ends the program while the program is still copying a file, I want to inform the user that he has to wait until the program finishes. In order to do this, I startet a new window (Form3) via a Thread, and end that thread after the programm finished copying:
private void ThreadProc()
{
Form3 form3 = new Form();
form3.ShowDialog();
}private void buttonCancel_Click(object sender, EventArgs e)
{
// start thread
Thread threadForm3 = new Thread(new ThreadStart(ThreadProc));
threadForm3.Start();// do something
//end thread
threadFrom3.Abort();}
In the new windows (From3) is a ProgressBar in "Marquee" style. The form is displayed correctly und can be aborted without problems. My problem is, that the ProgressBar is not working: no moving bar is displayed.
Could anyone help?
Thanks!
- Bearbeitet RenateL Freitag, 20. Juli 2012 10:57
Antworten
-
Hier kann man welche generieren, eigentlich für AJAX anwendungen gedacht, sollte aber irgend was passendes dabei sein...
ansonsten, Backgroundworker^^
mfg
Shmoo
***********************************************************
- Bearbeitet Lennart F Mittwoch, 25. Juli 2012 05:57
- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. Juli 2012 10:45
-
Ok,
das einfachste wäre, wenn du dir ein animiertes gif baust/besorgst und dies anzeigst. vielleicht findest du ja sogar eins was genauso aussieht wie die progrssbar.
es soll ja sowieso angezeigt werden bis die form gekillt wird, also wofür nen arm ausreißen wenns auch dumm aber einfach geht^^.
mfg
Shmoo
***********************************************************
- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. Juli 2012 10:45
Alle Antworten
-
Das liegt sicherlich daran, dass dem thread von der Form3 nicht der ist, wo der fortschritt passiert.
schau dir den backgroundworker mal an
http://msdn.microsoft.com/de-de/library/system.componentmodel.backgroundworker.aspx
sollte für deinen fall ganz nützlich sein.
mfg
Shmoo
***********************************************************
-
Hallo Shmoo,
danke für deine Antwort!
Ein Backgroundworker sollte aber nicht nötig sein, weil ich ja die Progressbar nicht updaten will. Ich will nur dass sie sich bewegt, damit der Benutzer weiß, dass das Programm noch arbeitet - deswegen auch der Style "Marquee".
Lg
-
Moin heldin,
ok, hab ich wohl ein wenig verpeilt.
Naja, ich weiss allerdings nicht ob es nicht egal ist, ob der fortschritt angezeigt wird oder nur eine animation. es könnte durchaus sein das die animation auch nur bei gemessenem fortschritt angezeigt wird. das ist ja nur eine style einstellung und ändert nichts an der funktion der progressbar. da solltest du aber lieber jemanden fragen der sich damit auskennt^^.
sorry das ich dir wohl doch nicht weiterhelfen konnte, würde aber trotzdem auf den bakcgroundworker setzten, sofern sich nichts in den progressbar eigenschaften ändern lässt.
mfg
Shmoo
***********************************************************
-
Ein Backgroundworker sollte aber nicht nötig sein, weil ich ja die Progressbar nicht updaten will.
Ja das stimmt. Du kannst den Backgroundworker auch weglassen und dafür alles manuall mit Theads umsetzen. Ist aber ungleich schwerer.
Was ich damit sagen will ist, das alles was irgend eine Aktion im Haupttrhead ausführt hängt. Ob das nun eine Animation der Progressbacr ist, ist egal. Auch die Animation wird letztendlich per Code erzeugt der durchlaufen werden muss. Wenn der Thead hängt gehts halt nicht.
Da hast keine andere Wahl!
MfG, Ulf
-
Hallo Leute,
danke für eure Antworten!
Ich denke ich habe nicht genau genug beschrieben, was das Programm überhaupt macht und was nicht funktioniert. Deswegen hier nochmal alles ganz genau:
Start des Programms: das erste Fenster wird angezeigt, hier gibt der Benutzer sein Passwort ein und drückt OK
Dann startet das zweite Fenster: hier werden die Kopieraktionen gemacht; in diesem Fenster verwende ich auch einen Backgroundworker, damit jeweils angezeigt wird was kopiert wird und wie weit der Kopiervorgang insgesamt ist. Dafür verwende ich eine ProgressBar im Style "Continous". Das funktioniert auch sehr gut.
Was ich allerdings machen möchte und derzeit nicht funktioniert ist folgendes:
Wenn der Benutzer mitten im Programm abbricht (also während das zweite Fenster angezeigt wird), dann möchte ich ihm ein kleines zusätzliches Fenster (Form3) mit einem Text anzeigen dass er noch warten muss bis das Programm fertig ist (z.B. wenn es gerade eine sehr große Datei kopiert) und eine Progressbar im Style "Marquee" damit er sieht dass das Programm nicht hängt.
Theoretisch könnte ich einfach eine Messeagebox mit den Text machen. Ich hätte allerdings gerne eine Progressbar im Style "Marquee" und ich möchte, dass das Fenster so lange angezeigt wird, bis die Aktion im Hintergrund beendet ist. D.h. ich will das Fenster starten und dann (von Form2 aus) killen. Deswegen auch der Thread.@Ante: Application.EnableVisualStyles() habe ich auch schon probiert (direkt in Form3()) - hat leider auch nicht funktioniert
lg
-
Ok,
das einfachste wäre, wenn du dir ein animiertes gif baust/besorgst und dies anzeigst. vielleicht findest du ja sogar eins was genauso aussieht wie die progrssbar.
es soll ja sowieso angezeigt werden bis die form gekillt wird, also wofür nen arm ausreißen wenns auch dumm aber einfach geht^^.
mfg
Shmoo
***********************************************************
- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. Juli 2012 10:45
-
Hier kann man welche generieren, eigentlich für AJAX anwendungen gedacht, sollte aber irgend was passendes dabei sein...
ansonsten, Backgroundworker^^
mfg
Shmoo
***********************************************************
- Bearbeitet Lennart F Mittwoch, 25. Juli 2012 05:57
- Als Antwort markiert Robert BreitenhoferModerator Montag, 30. Juli 2012 10:45