Peugeot1220 - Mo 02.02.09 19:51
Titel: Backgroundworker
Hi,
ich kämpf da schon seit Tagen mit einem Backgroundworker Problem. Vielleicht könnt ihr mir da weiterhelfen.
Ich habe einen Backgroundworker, der eine Klasse instanziert und eine Methode daraus aufruft:
C#-Quelltext
1: 2: 3: 4: 5:
| protected override void OnDoWork(DoWorkEventArgs e) { CheckSomething cs = new CheckSomething(); cs.Check(e.Argument); } |
Das Problem ist, das ich die Ergebnisse aus cs.Check aus dem OnDoWork in ein Datagridview rein schreibe, jedoch die Werte überhaupt nicht zusammmen passen, weil sie mit den anderen Threads total durcheinander kommen.
Was mach ich falsch?
Die cs.Check Klasse beinhaltet ein webrequest der einen Servicepointer auslöst. Ergebnisse aus dem Webrequest und dem Servicepointer werden dann zurück an OnDoWork geliefert.
Ich hoffe ich war einigermaßen verständlich und ihr könnt mir weiterhelfen.
patrick
Moderiert von
Christian S.: C#-Tags hinzugefügtModeriert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mo 02.02.2009 um 18:59
JüTho - Mo 02.02.09 20:18
Titel: Re: Backgroundworker
Peugeot1220 hat folgendes geschrieben: |
Das Problem ist, das ich die Ergebnisse aus cs.Check aus dem OnDoWork in ein Datagridview rein schreibe, jedoch die Werte überhaupt nicht zusammmen passen, weil sie mit den anderen Threads total durcheinander kommen.
Was mach ich falsch? |
Es fehlen noch Angaben zu den übrigen Bestandteilen des BackgroundWorker. Falsch ist auf jeden Fall Folgendes:
- Es gehört sich nicht, Daten direkt in ein DataGridView zu schreiben. Daten gehören in eine Datenmenge, z.B. DataTable, und diese wird an das DataGridView gebunden.
- Wenn das so gemacht wird, beißt sich das normalerweise nicht mit dem GUI-Thread (vorausgesetzt natürlich, dass die einzelnen Zeilen sich nicht beißen).
- Wenn Du eine laufende Anzeige haben willst, muss die durch einen manuellen Aufruf von worker.ReportProgress() aktiviert werden.
Siehe das Beispiel in der
SDK-Doku/MSDN zur
BackgroundWorker-Klasse.
Gruß Jürgen