Announcement

Collapse
No announcement yet.

Background Worker Threadübergreifender Vorgang

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

  • Background Worker Threadübergreifender Vorgang

    Hallo,
    ich habe eine Prozedur, die viel Zeit in Anspruch nimmt. Dementsprechend friert auch das Programm kurzzeitig ein, bis die Prozedur abgeschlossen ist.

    Um dies zu vermeiden, wird die Prozedur über einen BackgroundWorker ausgelöst. Das klappt auch alles so weit ganz prima. Allerdings bekomme ich einen Fehler, wenn ich Controls in meiner Form einen Wert zuweise. (Threadübergreifender Vorgang, ...)

    Was kann ich tun, damit den controls Werte zugewiesen werden können, ohne dass das Programm abstürzt. Die Wertzuweisung muss auf jeden Fall innerhalb der Prozedur erfolgen, also innerhalb des BackgroundWorkers.

    Ich hab schon ein bisschen rumgesucht und so Begriffe wie "Invoke" oder "Delegate" gefunden. Mit den Beispielen konnte ich aber wenig anfangen.

    Ich hoffe ihr könnt mir helfen.

    danke

    mfg stash

  • #2
    Hallo stash,

    der BackgroundWorker ist ja gerade die Komponente um die Arbeit mit threadübergreifenden Vorgängen zu vereinfachen. Aktualisieren die Controls im Progress-Ereignis (oder wie das genau heißt).

    Nur wenn du die Threads manuelle erstellt müssen die Controls mit InvokeRequired/Invoke aktualisiert werden.


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

    Comment


    • #3
      danke für die schnelle antwort, allerdings werde ich daraus nicht schlau.

      ich habe einen background worker, der mit doWork die Prozedur (welche so lange dauert) durchläuft. In dieser Prozedur werden allerdings auch Steuerelemente upgedatet (werte zugewiesen, ...) und da hängt sich dann das Programm auf, wegen threadübergreifenden Vorgangs.

      es gibt auch den runworkercompleted, der danach kommt, dort könnt ich die werte aktualisieren, allerdings werden die werte über eine for schleife control für control aktualisiert (und genau das dauert so lange), deswegen muss dieser schritt in der background worker doWork Prozedur durchgeführt werden.

      Wie schaff ich es jetzt, da den threadübergreifenden Fehler rauszukriegen,

      danke für die antworten

      mfg stash

      Comment


      • #4
        Hast du mal in die Doku des BGW geschaut. Da gibt es ein super Beispiel.
        Wenn ich deine Antwort lese scheint mir dass du das in der Doku noch nie gesehen hast.

        Antwort:
        Aktualisieren die Controls im Progress-Ereignis

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

        Comment


        • #5
          Hallo
          nein das Beispiel kenne ich wirklich noch nicht. des wäre ja genau das, was ich brauche. kannst du mir den link dazu sagen. ich hab mal grade in der vb.net hilfe geschaut, da ist zwar auch ein beispiel drin, aber nicht das, was du gerade beschrieben hast.

          danke

          mfg stash

          Comment


          • #6
            nein das Beispiel kenne ich wirklich noch nicht. des wäre ja genau das, was ich brauche.
            Ich weiß

            kannst du mir den link dazu sagen
            Googeln kannst du selber....oder doch nicht: http://www.google.at/#hl=de&source=hp&q=.net+backgroundworker&btnG=Goog le-Suche&meta=&aq=0&oq=.net+backg&fp=40926e27cfe71b09


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

            Comment


            • #7
              ok, mit dem link krieg ich aber auch nur des beispiel, welches in der vb.net hilfe ist. aber dieses kann ich mir ja mal anschauen.

              danke.

              Comment


              • #8
                ok, mit dem link krieg ich aber auch nur des beispiel, welches in der vb.net hilfe ist. aber dieses kann ich mir ja mal anschauen.
                Hast du was anderes erwartet? Dass dein Programm dort zum Download bereit steht

                Ein bischen Eigenrecherche und logisches Denken schadet beim Programmieren sowie in den restlichen Bereichen des Lebens nie.


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

                Comment


                • #9
                  nein, natürlich nicht. allerdings fand ich das beispiel ein bisschen zu umfangreich. außerdem hab ich dich nicht nach fertigem programmcode gefragt, sondern nur, wie ich das problem mit dem threadübergreifenden vorgängen bewältigen kann.

                  (und natürlich ist die .net hilfe eine wunderbare sache, da wird mir auch häufig geholfen. nur bei solchen Problemen, wo die Beispiele in .net eher verwirren als erleuchten, hätte ich gedacht, dass es das beste ist, in einem forum nachzufragen.)

                  Comment


                  • #10
                    außerdem hab ich dich nicht nach fertigem programmcode gefragt, sondern nur, wie ich das problem mit dem threadübergreifenden vorgängen bewältigen kann.
                    Außerdem hab ich nur die Antwort auf deine Frage gegeben


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

                    Comment


                    • #11
                      ja, weiß schon. war ja auch dankbar für die hilfe.

                      mfg stash

                      Comment

                      Working...
                      X