Announcement

Collapse
No announcement yet.

BackGroundWorker

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Was meinst du mit wilde Mischung?

    Weil ich Sleep ( als Thread ) mit eingebunden habe ?

    Das war nur für Testzwecke

    Comment


    • #17
      Nein, das meine ich nicht - das hab ich schon kapiert

      Ich meine damit die Mischung eines BackgroundWorkers mit Invoke.
      Ein BackgroundWorker erledigt das ohne Invoke (bei richtiger implementierung).
      Invoke ist (nur) beim manuellen Threading nötig.

      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #18
        Das Invoke habe ich benutzt um die Meldung, wie weit jeder Worker ist, an die Form weiter zu leiten...

        Comment


        • #19
          Genau für das gibts das ProgressChanged-Ereignis des BackgroundWorker.

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #20
            Ok.
            Dann werde ich mein Glück noch mal versuchen...



            Mein Ergebis werde ich die morgen früh zeigen....

            ...muss jetzt Feierabend machen...

            Bis dahin..

            Comment


            • #21
              Hallo nochmal,
              ich komm da nicht so richtig weiter,
              ich bekomme immer folgenden Fehler:

              Dieser BackgroundWorker gibt an, dass er keinen Fortschritt meldet. Ändern Sie WorkerReportsProgress, um anzugeben, dass er einen Fortschritt meldet.

              Comment


              • #22
                Lies mal in der MSDN beim BackgroundWorker nach (Stichwort: ReportProgress)

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #23
                  OK.
                  Danke für die Lehrstunde....

                  Schau bitte noch mal in mein Zip-File...
                  ...es funktioniert jetzt, aber ist das so korrekt...???


                  Warum ist das mit dem Invoke, wie ich es vorher hatte, falsch? Was hat das für Nachteile?
                  Attached Files

                  Comment


                  • #24
                    Hab den Code angeschaut.

                    Folgende Tipps/Anmerkungen:
                    • Loop Until MW1 = True And MW2 = True: MW1 und MW2 sind boolsche Variablen. D.h. sie können nur True oder False sein. Eine Prüfung auf True ist Schwachsinn. Es genügt somit Loop Until MW1 AND MW2
                    • In MyWorker1_DoWork könnte direkt auf MyWorker1 zugegriffen werden ohne den sender casten zu müssen - ist aber Geschmackssache
                    • SetTxtBG1 und SetTxtBG2 wird nicht verwendet -> entfernen bzw. auskommentieren


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #25
                      Warum ist das mit dem Invoke, wie ich es vorher hatte, falsch? Was hat das für Nachteile?
                      Grundsätzlich ist am Invoke nichts falsches dran. Der BackgroundWorker erledigt nur die selbe Arbeit für dich und ist somit eine Erleichterung - im Hintergrund passiert nichts anderes.

                      Die Mischung von Invoke und BackgroundWorker ist nicht sinnvoll, da der BackgroundWorker das Invoke intern aufruft und somit du dich nicht darum kümmern muss.

                      Die von mir bereitgestellte Klasse zur Parallelisierung verwende ich um die Arbeit auf mehrere Prozessoren aufzuteilen. Dies geht v.a. bei Schleifen in denen die Ergebnisse eines Durchlaufs nicht abhängig vom Ergebnis eines vorigen Durchlaufs sind.

                      Ob nun BackgroundWorker oder die Threads manuell erstellen ist eigentlich egal. Der BackgroundWorker nimmt dir Arbeit ab, mit "manuellen" Threads hast du mehr Kontrolle.

                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #26
                        OK. Danke für deine Ausführungen.


                        SetTxtBG1 und SetTxtBG2 wird nicht verwendet -> entfernen bzw. auskommentieren
                        Der Code war noch aus der vorhergehenden Version, habe ich vergessen tz löschen...

                        Aber sonst, ist wohl alles in Ordnung ?

                        Ich denke ich kann das jetzt in mein Haupt-Projekt einsetzten und anpassen, oder gibt es noch etwas wichtiges auf was ich achten muss...??

                        Eine Frage habe ich noch zum Abbruch des BGW.
                        In meinem Beispiel habe ich Im DoWorks eine Schleife, in welcher ich dann auch auf Abbruch abrage...

                        Code:
                         If MWo.CancellationPending Then
                                e.Cancel = True
                                Return
                              End If
                        Wo muss ich das den einsetzten, wenn ich gar keine Schleife habe, sondern mehr oder weniger einen Aufruf an eine Datenbank und dann die Anbindung der Daten an eine Listbox..??

                        Comment


                        • #27
                          Der Code passt.

                          Wo muss ich das den einsetzten, wenn ich gar keine Schleife habe, sondern mehr oder weniger einen Aufruf an eine Datenbank und dann die Anbindung der Daten an eine Listbox..??
                          Nirgends. Entweder der Thread wird ausgeführt oder vorher abgebrochen -> deshalb verwende ich (teilweise) "manuelle" Threads.

                          mfG Gü
                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                          Comment


                          • #28
                            Nirgends. Entweder der Thread wird ausgeführt oder vorher abgebrochen
                            Was würde denn passieen, wenn die Abfrage an die Datenbank noch dauert..., der User die Form schließt, ich im Form_Closing aber folgenden Code habe:

                            Code:
                             If MWo.IsBusy Then
                                  MWo.CancelAsync()
                                End If

                            Comment

                            Working...
                            X