Backgroundworker mehrere Parameter

06/02/2013 20:00 Wurzelhüpfer#1
Hallo Leute,

ich hänge grade verzweifelt an einem Problem fest.

Ich habe einen Backgroundworker in mein Tool implementiert, nun soll der eine Schleife durchlaufen. In dieser Schleife müsste er auf zwei Textboxen zugreifen, jedoch geht das ja nicht, da es in einem anderen Thread läuft.

Ich habe etliche Möglichkeiten gelesen/versucht doch keine will klappen. Man kann leider nur in der Zeile ein Argument einfügen, wenn ich zwei Argumente mit einem "&" verbinde, klappt es auch nicht.

Code:
BackgroundWorker1.RunWorkerAsync()
Hoffe mir kann hier jemand helfen.
06/02/2013 20:28 Schlüsselbein#2
Es gibt doch die Events vom Backgroundworker, auf die du vom GUI-Thread reagieren kannst. Ich hab schon ewig nichtmehr mit .NET gearbeitet und weiß gerade auch garnicht, wie diese Events heißen, aber msdn wird dir da sicherlich helfen.
06/02/2013 20:37 Wurzelhüpfer#3
Das ProgressChanged Sub, aber das ist ja ein extra Sub, nicht wie das "DoWork" Sub, somit kann ich ja darauf nicht zugreifen ._.
06/02/2013 20:49 Schlüsselbein#4
Du emittierst das Event in der DoWork-"Sub" und packst dein Zeug für die GUI in ProgressChanged rein. Dem Event kannst du sicherlich auch noch ein Parameter übergeben. Das kann dann je nach Komplexität ein einfacher Wert sein oder ein Objekt, welches alle Informationen für die GUI besitzt.
06/02/2013 21:01 reCougar#5
Versuch es mit Delegate und Invoke
06/02/2013 21:03 Wurzelhüpfer#6
Also ich probier es mal so zu erklären:

Code:
 Private Sub btn_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_start.Click

        BackgroundWorker1.RunWorkerAsync()

    End Sub
Code:
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

For Each line In IO.File.ReadLines(TextBox1.Text) ' <- Wert wird nicht aus dem GUI genommen.

End Sub
Und das Problem dann mit der 2. Textbox, es funktioniert einfach nicht, wenn ich den BGW Starte, kommt direkt die Finishmeldung... :confused:
06/02/2013 21:28 Schlüsselbein#7
Les den Inhalt der Textbox im GUI-Thread aus und lass den Worker dann mit den Daten arbeiten.
06/02/2013 21:33 Wurzelhüpfer#8
Quote:
Originally Posted by Schlüsselbein View Post
Les den Inhalt der Textbox im GUI-Thread aus und lass den Worker dann mit den Daten arbeiten.
Und wie soll das denn funktionieren? Der Gui-Thread ist der "ProgressChanged-Sub" wie soll der denn vor dem "DoWork-Sub" ausgeführt werden? :confused:

Quote:
Originally Posted by reCougar View Post
Versuch es mit Delegate und Invoke
Hast du vielleicht ein Beispiel für mich oder ein Tut?
06/02/2013 21:52 reCougar#9
Quote:
Originally Posted by Wurzelhüpfer View Post
Und wie soll das denn funktionieren? Der Gui-Thread ist der "ProgressChanged-Sub" wie soll der denn vor dem "DoWork-Sub" ausgeführt werden? :confused:



Hast du vielleicht ein Beispiel für mich oder ein Tut?
Google ist dein Freund
06/02/2013 22:21 dready#10
[Only registered and activated users can see links. Click Here To Register...]

Das dürfte sein was du suchst, musst die Daten dem Thread halt mitgeben.
06/02/2013 23:08 Schlüsselbein#11
Quote:
Und wie soll das denn funktionieren? Der Gui-Thread ist der "ProgressChanged-Sub" wie soll der denn vor dem "DoWork-Sub" ausgeführt werden?
Du startest den bgw ja irgendwie aus dem GUI Thread heraus. Les die Daten ein und starte dann den Thread.