Ich arbeite in einem BackgroundWorker und möchte in dessen DoWork eine Liste an eine BindingSource übergeben. Jetzt bekomme ich natürlich die Fehlermeldung das die BindingSource nicht threadsicher ist. Was kann ich machen?
// nicht threadsicher
BindingSource.DataSource = list;
Statt mit extra Threads und Control.Invoke, kann man auch mit der BackgroundWorker-Klasse ungültige threadübergreifende Vorgänge vermeiden. Dazu müssen bei BackgroundWorker alle Zugriffe auf das GUI einfach aus den ProgressChanged- oder RunWorkerCompleted-EventHandlern durchgeführt werden. Wenn man sich daran hält, ist explizites Control.Invoke bei BackgroundWorker nicht erforderlich, denn die genannten EventHandler werden hinter den Kulissen automatisch per Control.BeginInvoke aufgerufen.
Wie soll man mit den beiden angegebenen Events in meinem Beispiel arbeiten? Sollen die BindingSource-Aufrufe ausgelagert werden in RunWorkerCompleted?
Hallo digi333,
Sollen die BindingSource-Aufrufe ausgelagert werden in RunWorkerCompleted?
ja, insbesondere, wenn es nur um den gezeigten Zugriff geht.
Oder bei vielen Zugriffen alternativ eben auch in ProgressChanged.
herbivore