Ich habe Probleme, die Aktualisierung eines WPF ListView Bound to a an ObservableCollection<T>
innerhalb eines Task-Threads mit (Task Parallel Library)
Ich habe ein Small Tool zum Lesen Artefakt Dateien und zeigt die Anzahl der einzelnen Segmente (die ersten drei Buchstaben einer Zeile) an.
Die enthaltenen Segmente mit ihren Zählungen werden in einer Listbox angezeigt.
Wenn ich anfangs eine Datei lade, funktioniert alles gut, und ich sehe, wie die GUI die Segmente zählt. Mein Programm erlaubt den Wechsel zu einer anderen Datei. Wenn ich das tue (mit genau demselben Code), schlägt es mit der folgenden Ausnahme fehl.
Dieser Typ von CollectionView unterstützt keine Änderungen an seiner SourceCollection von einem anderen Thread als dem Dispatcher-Thread.
Hier ist der Code, der nicht funktioniert
public class SegementLineCollection : ObservableCollection<SegmentLine>
{
public void IncrementCount(string Segment)
{
Segment = Segment.ToUpper();
SegmentLine line;
if (this.Select(x => x.SegmentName).Contains(Segment))
{
line = this.Where(x => x.SegmentName == Segment).FirstOrDefault();
}
else
{
line = new SegmentLine();
line.SegmentName = Segment;
this.Add(line); // <--- At this point comes the Exception
}
line.Count++;
}
}
Hier ist der TPL-Aufruf, den ich verwende:
private string _FileName;
public string FileName
{
get
{
return _FileName;
}
set
{
_FileName = value;
OnPropertyChanged("FileName");
if (!String.IsNullOrEmpty(value))
new Task(() => StartFile()).Start();
}
}
Hat jemand einen Treffer für mich?
------------ E D I T ------------------
Die bereitgestellten Antworten mit TaskScheduler.FromCurrentSynchronizationContext() oder Dispatcher haben nicht den gewünschten Erfolg gebracht!
Ist es möglich, dass das Ändern der Bindung beim Laden der neuen den Trick macht.
Hier ist die Bindung, die ich verwende, der Leser Onject im ViewModel geschaltet ist, und die GUI ist mit INotifyPropertyChanged-Implementierung nicht zufrieden