Wie aktualisiere ich eine datengebundene Datagrid-Ansicht von einem Hintergrund-Thread korrekt?

8

Ich habe ein benutzerdefiniertes Objekt, das INotifyPropertyChanged implementiert. Ich habe eine Sammlung dieser Objekte, wobei die Sammlung auf BindingList basiert Ich habe eine Bindungsquelle für die Sammlung erstellt und die Datenquellen der Bindingsource und Datagridview festgelegt.

Alles funktioniert gut, außer dass ich die Eigenschaften des benutzerdefinierten Objekts aus Hintergrundthreads aktualisieren muss. Wenn ich dies tue, erhalte ich den folgenden Fehler:

  

BindingSource kann keine eigene Datenquelle sein. Setzen Sie die Eigenschaften DataSource und DataMember nicht auf Werte, die auf BindingSource zurückgehen

Ich habe den folgenden Beitrag gefunden, der mein genaues Problem (und Lösung?) zu haben scheint, aber ich kann es nicht genau herausfinden.

  

Ссылка

Ich habe die Oper-Variablen per Post in meinem Business-Objekt erstellt und initialisiert und dann die beiden Event-Funktionen in meine Collection-Klasse eingefügt. Dies kompiliert korrekt, aber hängt ohne Ausnahme beim Ausführen.

Ich habe viele Posts gesehen, die "Invoke / Begin Invoke" verwenden, aber ich rufe keine Funktionen auf der Benutzeroberfläche auf, ich aktualisiere nur Business-Objekte, also bin ich mir nicht sicher, wo ich die Aufrufe aufrufen würde.

Eine Einschränkung: Ich möchte, dass das Geschäftsobjekt nicht merkt, wer es anzeigt (da es mehrere Konsumenten gibt), also das Senden von GUI-Referenzen in das Geschäftsobjekt, so dass ich später mit diesen Referenzen aufrufen kann Möglichkeit.

    
Jason Coyne 18.01.2009, 19:39
quelle

3 Antworten

14

Ich habe diese Klasse in einem Forum gefunden, das funktioniert. Verwenden Sie dies anstelle von BindingList

%Vor%     
Jason Coyne 18.01.2009, 19:52
quelle
1

Da ich mir die Zeit genommen habe, das Beispiel für meine Bedürfnisse zu formatieren, kann ich es auch hier als lesbare Referenz veröffentlichen. Bis auf die Formatierung hat sich nichts geändert.

%Vor%     
VVS 09.04.2009 09:40
quelle
0

Nicht ganz Thread-sicher, aber diese kleine Änderung an den obigen Antworten könnte große Auswirkungen haben, wenn Ihr Hintergrund-Thread Objekteigenschaften schneller ändert, als sie angezeigt werden können;

%Vor%

Begrüßen Sie Vorschläge zur Reduzierung der Anzahl gebuchter Anrufe, wenn das gleiche Objekt mehrmals geändert wurde, und stellen Sie sicher, dass jeder spätere Sendeaufruf blockiert wird, bis alle gebuchten Anrufe verarbeitet wurden.

    
Jeremy Lakeman 14.10.2014 03:41
quelle