2011-03-04 41 views
0

我正在使用ObservableCollection實現,該實現允許從UI線程以外的其他線程創建/更新/刪除集合項目。一切工作正常,除非從UI更新集合,我不能從不同的線程刪除它的項目。 http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx從不同的線程之謎中刪除ObservableCollection項目

請幫助:

的ObservableCollectionEx實現取自! 感謝

編輯:

確定。清除一些事情:我正在實現一個帶有上下文同步的ObservableCollection。這意味着當我添加/刪除/更新集合上的項目時,我相應地在ObjectContext上執行相同的操作。當我檢查我的異常時,我看到它在調用ObjectContext.DeleteObject()方法時從UI線程更新項目後引發。所以它基本上與ObservableCollection無關,但與ObjectContext本身無關。雖然與我在嘗試從另一個線程刪除集合上的項目時首先得到的異常相同(例外是:「這種類型的CollectionView不支持從與分派器線程不同的線程更改其SourceCollection。 「

情節複雜....

非常感謝......

+0

什麼你的意思是「我不能」?你的代碼是什麼,運行時會發生什麼? – Jon 2011-03-04 13:03:41

+0

我編輯了我的問題。一探究竟。謝謝。 – OrPaz 2011-03-07 11:40:38

回答

1

你確定問題是在

接下來的代碼工作正常:

 private readonly ObservableCollectionEx<int> collection = new ObservableCollectionEx<int>(); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      this.collection.Add(30); 
      this.collection.Add(50); 
      this.collection.Add(70); 

      new Thread(() => 
      { 
       this.collection.Add(100); 
      }).Start(); 

      new Thread(() => 
      { 
       this.collection.Add(110); 
       this.collection.Add(120); 
      }).Start(); 

// Update and delete in UI thread 
      this.collection.Remove(30); 
      this.collection[0] = 1130; 

      new Thread(() => 
      { 
// Delete in worker thread after modification in UI thread 
       this.collection.Remove(1130); 
      }).Start(); 
     } 

你能提供一些錯誤發生的代碼嗎? 此外,目前尚不清楚究竟出了什麼問題?你有沒有任何異常或刪除工作線程沒有改變集合或它已改變收集不正確或你的代碼甚至掛起?

+0

我編輯了我的問題。一探究竟。謝謝。 – OrPaz 2011-03-07 11:39:49

相關問題