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.
Ich habe diese Klasse in einem Forum gefunden, das funktioniert. Verwenden Sie dies anstelle von BindingList
%Vor%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.
Tags und Links c# data-binding multithreading datagridview inotifypropertychanged