我有问题,ObservableCollection<T>
使用(任务并行库)更新绑定到任务线程中的 WPF ListView
我有一个小工具读取编辑文件,并显示每个段的计数(一行的前三个字母)。
包含的段及其计数显示在列表框中。
Wenn 我最初加载文件一切正常,我看到 GUI 正在计算段数。我的程序允许切换到另一个文件,如果我这样做(使用完全相同的代码)它会失败并出现以下异常。
这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。
这是失败的代码
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++;
}
}
这是我使用的 TPL 调用:
private string _FileName;
public string FileName
{
get
{
return _FileName;
}
set
{
_FileName = value;
OnPropertyChanged("FileName");
if (!String.IsNullOrEmpty(value))
new Task(() => StartFile()).Start();
}
}
有没有人对我有任何打击?
- - - - - - 编辑 - - - - - - - - -
使用 TaskScheduler.FromCurrentSynchronizationContext() 或 Dispatcher 提供的答案没有做到这一点!
加载新的绑定时更改绑定是否可以解决问题。
这是我使用的Binding,在ViewModel中切换了Reader Onject,并通过INotifyPropertyChanged实现通知了GUI