Threading mit C# [Erledigt]



  • Hallo Leute,

    ich hätte eine Frage bezüglich der Threads/Background Worker in C#.
    Ich stehe derzeit vor einem Problem undzwar habe ich mir via Listview
    einen Ordner Browser gebastelt, der auch funktioniert.
    Allerdings arbeite ich hier einmal mit einem direkten Aufruf der Form

    Load_Panel -> ein Panel mit Ladebalken usw.

    damit dieses sichtbar wird und dem User als ActiveForm zur Verfügung steht.
    Als nächstes möchte ich während des Auslesens meines Ordner/Datei Pfade
    den besagten Ladebalken der sich im Panel befindet mit Threads voranbringen,
    indem ich erstmal Abfrage wie viele Ordner sich im Pfad befinden und dann
    der Progressbar dieses Value übertrage. (Hoffe ihr kommt mit) :p

    So nun möchte ich aber nicht jedesmal eine neue Instanz anlegen

    ListThread = new Thread(this.run);
    ListThread.Start();
    

    mir ist klar das ich hier mit Abort und Start arbeiten kann wie ich Parameter übergeben ist mir auch geläufig, aber mein Progressbar-Element bewegt sich merkwürdigerweiße erst nachdem alle Pfade ausgelesen und meiner Listview hinzugefügt worden sind. Meine Fragen:

    1. Ist es möglich für die Listview einen Thread anzulegen der meinen Anwender nicht daran hindert während des Auslesens an seinem Editor weiterzuarbeiten ?
    (Falls nicht eine Wort in die Runde werfen das mir helfen könnte^^)

    2. Das oben genannte Problem, wie bewerkstellige ich, dass meine Progressbar
    als Thread Value Steigerungen erhält ohne unnötig dutzende von Instanzen zu
    erstellen ? Nur mit .Abort/.Stop und .Start Anweisungen ?

    - Danke im Voraus 😃



  • Arbeitest du mit Forms oder WPF. Für Forms schau dir mal die Methode BeginInvoke an, und für WPF schaust du dir mal den Dispatcher an.



  • Ich arbeite mit Forms falls das aus der Frage nicht ablesbar sein sollte 🙂
    Werd mich mal mit BeginEvoke befassen, hätte aber noch eine übrige Frage.

    Ist das die Antwort auf beide Fragen oder kann ich damit Frage 1 ebenfalls abhacken ?

    //Kleiner Edit:

    Könntest du mir vielleicht ein konkretes Beispiel nennen ?



  • Achso daran habe ich jetzt gar nicht gedacht:D
    Grundsätzlich gilt, wenn du in einem Thread ein Control erzeugst kann auch nur in diesem Thread damit gearbeitet werden. An deiner Stelle würde ich die Listview über den UI Thread erzeugen lassen und das anzeigen deiner Progressbar über einen anderen Thread machen, über BeginInvoke kannst du dann der GUI kurz zwischendurch immer nochmal eine Anzeige rüberschieben sozusagen.


Anmelden zum Antworten