我目前有一个ObservableCollection:
private readonly object _outputCollectionLock = new object();
private ObservableCollection<ChatterOutput> _outputs;
public ObservableCollection<ChatterOutput> Outputs
{
get { return _outputs; }
set
{
_outputs = value;
BindingOperations.EnableCollectionSynchronization(_outputs, _outputCollectionLock);
}
}
问题出现在我的一个事件处理程序中。当调度事件处理程序时,我正在添加一个新对象,如下所示:
lock (_outputCollectionLock)
{
Outputs.Add(new ChatterOutput{Option = option});
}
在锁定后设置的任何断点中,我都可以看到新项目被添加到集合中。但是,如果我在不同的时间断点,我发现没有添加任何新元素。
我尝试在Application.Current.Dispatcher
上调用它,但这并没有改变任何东西。使用这些集合的唯一另一件事是XAML绑定,即Mode=OneWay
。
这是一个线程问题,还是我完全错过了什么?
由于
答案 0 :(得分:-1)
这里的问题来自于将元素传递给多个类。 当我将输出从一个类传递到另一个类,然后使用线程事件处理程序时,这些类变得分离,因此修改Collection并没有修改正确的类。
为了解决这个问题,如果您要进行多线程,请找一个在构造函数中传递类的解决方法。我的解决方案是Singleton模式。
感谢评论中的每个人。