Was ist der beste Weg, um eine ObservableCollection von einem anderen Thread zu aktualisieren?
Ich bin mit der BackgroundWorker
zu aktualisieren ObservableCollection
aber es gibt diesen Fehler:
"Diese Art von
CollectionView
hat
keine Unterstützung für änderungen an seinem
SourceCollection
aus einem thread
verschiedene von der Dispatcher-thread."
Was ist der beste und eleganteste Weg, um dieses Problem zu lösen, mit der geringsten Menge an Arbeit. Ich will nicht schreiben low-level-lock-basierte multi-threading-code.
Ich habe einige Lösungen gesehen, online, aber Sie sind schon einige Jahre alt, also nicht sicher, was der aktuelle Konsens für die Lösung dieses Problems.
InformationsquelleAutor der Frage Joan Venge | 2011-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn MVVM
InformationsquelleAutor der Antwort djeeg
Wenn Sie die Auflistung initialisiert im Konstruktor wird es auf der Standard-Anwendungs-thread.
Aufrufen der Haupt-thread, die Sie dies tun können:
Müssen Sie werfen die Anonymen Delegaten als eine Handlung, sonst kommt er Durcheinander \O_o/
Wenn Sie die Async CTP, können Sie dies tun
InformationsquelleAutor der Antwort ywm
Verwendung BGW, es wurde entworfen, um Ihr problem zu lösen. Aber Sie haben, um es richtig zu nutzen, aktualisieren Sie die Sammlung in ein ProgressChanged-oder RunWorkerCompleted-Ereignishandler. Wenn das, was Sie tun, dann Sie erstellt die BGW-Instanz auf dem falschen thread. Es werden im UI-thread ausgeführt.
InformationsquelleAutor der Antwort Hans Passant
Versuchen Sie Dies:
InformationsquelleAutor der Antwort Nalan Madheswaran
Ich hatte das gleiche problem beim nachladen eine observableCollection von einem Ereignis (DataReceived) ausgelöst durch die serielle Schnittstelle der Klasse.
Ich verwendet MVVM; ich habe versucht, aktualisieren die Sammlung mit dem BackgroundWorker, aber es erhöht die "Diese Art von CollectionView unterstützt keine änderungen an seiner SourceCollection aus einem anderen thread vom Dispatcher-thread.". Ich habe versucht, viele andere Lösungen gefunden online, aber der einzige, der mein problem gelöst (sofort!) war die Verwendung eines multi-threading-observable-collection (ich habe in diesem post: Wo bekomme ich eine thread-sichere CollectionView?)
InformationsquelleAutor der Antwort Daniele Armanasco