2016-03-11 42 views
0

目前,我有一个ObservableCollection:的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

你能告诉我们你是如何尝试使用调度程序?对于'ObservableCollection'还有一件事,你不能在XAML的'CollectionViewSource'中使用它。 – XAMlMAX

+0

在Dispatcher.BeginInvoke调用中包装该添加调用。 – Gilad

+2

首先移除'BindingOperations.EnableCollectionSynchronization(_outputs,_outputCollectionLock);'并将它移到你的'ViewModel'的构造函数中。我试着用你的代码使用任务,它很好地工作。 – AnjumSKhan

回答

-1

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

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

谢谢大家的意见。

相关问题