ObservableCollection异步项未添加

时间:2016-03-11 10:05:10

标签: c# wpf multithreading xaml

我目前有一个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

这是一个线程问题,还是我完全错过了什么?

由于

1 个答案:

答案 0 :(得分:-1)

这里的问题来自于将元素传递给多个类。 当我将输出从一个类传递到另一个类,然后使用线程事件处理程序时,这些类变得分离,因此修改Collection并没有修改正确的类。

为了解决这个问题,如果您要进行多线程,请找一个在构造函数中传递类的解决方法。我的解决方案是Singleton模式。

感谢评论中的每个人。