ProgressBar in separatem Thread

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    ProgressBar in separatem Thread

    Hallo,

    ich möchte in einem bereits fertiggestellten Programm den Ladevorgang in der Statusbar mit einer Progessbar anzeigen.

    Dabei verwende ich zwei methoden, StartPBar und StopPBar. Da die ProgressBar immer hängen bleibt wenn sie im selben thread läuft wie der Rest, möchte ich diese nun in einem separaten Thread laufen lassen.

    Das Problem ist nun aber, dass ich die Progressbar zwar in einem separaten Thread starten kann, diese aber dann wieder im Hauptthread läuft . Da ich nicht mein komplettes Programm auseinanderpfücken möchte um für jeden DB-Zugriff, Berechnung usw einen neuen Thread zu starten, suche ich nach einer Lösung bei der dei ProgressBar wirlich in einem extra Thread läuft!?

    Hat jemand ne Idee?

    Vielen Dank für Eure Hilfe,


    Phreaky
    Hi!

    Für 1 Programm mehrere Threads zu verwenden ist eigentlich eine unsaubere Methode (wenn nicht unbedingt notwendig).

    Wenn dein Code läuft, erhält das Programm keine Nachrichten, bis entweder die Funktion / Sub zu ende ist (also bis das Programm in der Main-Loop ist) oder das Programm die Messages abruft.

    Die Messages werden in VB6 und in den .net-Sprachen mit DoEvents abgerufen. (Wie Pascal schon erwähnt hat)
    Wie dir gleich auffallen wird, gibts es DoEvents nicht. ;)

    der voller name ist nämlich

    VB.NET-Quellcode

    1. System.Windows.Forms.Application.DoEvents
    (oder so ähnlich)
    Wenn dir das zu lang ist, kannst du auch

    VB.NET-Quellcode

    1. Imports System.Windows.Forms

    ganz am Anfang vom Code hinschreiben; sollte bei Formularen schon dort stehen

    Das heißt eine For-Schleife sollte so aussehen:

    VB.NET-Quellcode

    1. For i as long = 0 to 9999
    2. Application.DoEvents()
    3. 'dein weiterer code
    4. Next i

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()

    Hallo,

    danke mal für den Tip mit DoEvents, mein Problem ist aber dabei auch, dass ich ja wieder das ganze Prog auseinandernehmen muss (DoEvents einfügen) und teilweise müssen die DoEvents ja auch noch zeitlich angepasst werden weil sie sonst zu viel Zeit verbraten würden.

    Gibts keine Möglichkeit dass ich einfach vor der Methode die ich als nächstes ausführe meine ProgressBar mit meiner PBStart starte und diese dann läuft (also einfach Marquee) bis ich wieder meine PBarStop aufrufe?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Phreaky“ ()

    in der Statusbar mit einer Progessbar

    Beides war in VB6 nicht (sauber) möglich, da die StatusBar kein Container-Control ist und somit man immer die Progressbar mit der StatusBar verscheiben müsste, wenn sich die fenstergröße ändert. Hat sich das in VB.net geändert? Ich würde entweder auf die Form eine Progressbar bauen oder in der StatusBar nur eine Prozentzahl.
    nun in einem separaten Thread laufen lassen

    Da kannst du einen Timer verwenden, in dem du die Progressbar aktualisierst. Dies setzt aber ebenfalls doevents im eigentlichen Ladevorgang voraus, was den Timer wieder überflüssig macht, also woszu ein separater thread?
    Da die ProgressBar immer hängen bleibt

    Das klinkt für mich ganz so, also ob das DoEvents an der falschen Stelle aufgerufen wird (bzw zu spät), oder du einen Befehl aufrufst, der länger dauert als bis das DoEvents erst aufgerufen wird, sodass doevents nur bei mehreren KURZEN Befehlen bzw Schleifen sinnvoll ist.

    Ich verstehe auch nicht so richtig, wozu die diese StartPBar und StopPBar Methoden brauchst bzw wo du das Doevents einsetzt und wo die ProgressBar aktualisiert wurde. Quellcode wäre hier wirklich hilfreich!
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Agent“ ()