2011-03-04 53 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