none
ProgressBar in Marquee style does not work RRS feed

  • 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
    Freitag, 20. Juli 2012 10:48

Antworten

  • Hier kann man welche generieren, eigentlich für AJAX anwendungen gedacht, sollte aber irgend was passendes dabei sein...

     -> loading Gif generieren <-

    ansonsten, Backgroundworker^^

    mfg

    Shmoo


    ***********************************************************


    Mittwoch, 25. Juli 2012 05:56
  • 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


    ***********************************************************

    Dienstag, 24. Juli 2012 13:14

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


    ***********************************************************

    Sonntag, 22. Juli 2012 15:45
  • 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

    Montag, 23. Juli 2012 06:46
  • 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


    ***********************************************************

    Montag, 23. Juli 2012 09:55
  • 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

    Dienstag, 24. Juli 2012 06:43
  • Der Marquee Style functioniert nicht wenn Application.EnableVisualStyles() nicht gestellt ist.
    Dienstag, 24. Juli 2012 07:06
  • 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

    Dienstag, 24. Juli 2012 08:26
  • 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


    ***********************************************************

    Dienstag, 24. Juli 2012 13:14
  • Hier kann man welche generieren, eigentlich für AJAX anwendungen gedacht, sollte aber irgend was passendes dabei sein...

     -> loading Gif generieren <-

    ansonsten, Backgroundworker^^

    mfg

    Shmoo


    ***********************************************************


    Mittwoch, 25. Juli 2012 05:56
  • Hallo Shmoo,

    ist zwar jetzt keine Progressbar, aber es macht genau das, was ich möchte.

    Besten Dank, hat mir sehr geholfen!!

    lg

    Mittwoch, 25. Juli 2012 09:09
  • freut mich das du das problem lösen konntest

    MfG

    Shmoo


    ***********************************************************

    Mittwoch, 25. Juli 2012 11:06