2017-09-09 4 views
0

Ich habe ein C# -Projekt geerbt und bin wirklich darüber gestolpert, wie man ein Problem beheben kann.C# Project ObservableCollection

Grundsätzlich habe ich eine Klasse, die einen neuen Kommunikations-Thread hervorbringt. Dieser Kommunikations-Thread empfängt Daten und fügt diese Daten einfach einer ObservableCollection als benutzerdefinierte Klasse hinzu.

Die Hauptklasse startet auch einen anderen neuen Thread und dies verarbeitet die ObservableCollection, ihre im Grunde eine Last von linq quires und je nach erforderlicher Kombination etc. löst verschiedene Dinge im Code aus. Es ist eine kontinuierliche while-Schleife mit einem kleinen Schlaf nach seiner getan alle Überprüfungen

Nun ist es durchaus möglich, diese Verarbeitung könnte länger dauern als die nächste Nachricht zu kommen daher, warum es nicht in der Nachricht ausgelöst Trigger erfolgt.

Eine der ersten linq ist Collection.where (....). OrderByDescending (....). ToList();

Dies gibt häufig den Fehler "Sammlung wurde geändert; Enumerationsvorgang möglicherweise nicht ausgeführt" Fehler. Was sinnvoll ist, lese ich, während comms thread schreibt.

Was ist die beste Architektur für mich, um dies zu lösen?

Antwort

2

könnten Sie doppelte Pufferung betrachten:

  • Sie beginnen Nachrichten in Sammlung Sammeln A
  • , wenn der Verarbeitungs-Thread gestartet wird, leitet die Comms Aufgabe Sammlung B (erforderlich Verriegelung!).
  • dann verarbeitet es Sammlung A und löscht es danach. Sammlung B vor der Verarbeitung, etc

PS

  • nächsten Mal, wenn die Verarbeitung threas gestartet wird, die Comms Aufgabe Sammlung A leitet: Warum verwenden Sie einen ObservableCollection? Sie könnten z.B. Verwenden Sie eine einfache Liste, da Sie anscheinend keine Benachrichtigung verwenden, wenn eine neue Nachricht eintrifft

  • Verwandte Themen