2016-03-11 71 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模式。

謝謝大家的意見。

相關問題