无法在多线程中运行ObservableCollection

use*_*749 7 wpf multithreading observablecollection

似乎ObservableCollection仅支持从UI线程添加,删除,清除操作,如果它由NO UI线程操作,则抛出Not Support Exception.我试图覆盖ObservableCollection的方法,不幸的是,我遇到了很多问题.任何人都可以提供一个可由多线程操作的ObservableCollection示例?非常感谢!

Mar*_*ram 7

使用Kent提供的链接,您可以使用以下代码修改跨线程的集合:

while (!Monitor.TryEnter(_lock, 10))
{
   DoEvents();
}

try
{
   //modify collection
}
finally
{
   Monitor.Exit(_lock);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想修改原始线程上的集合,可以尝试使用UI线程的回调.我通常做这样的事情:

this.Dispatcher.Invoke(new MyDelegate((myParam) =>
{
  this.MyCollection.Add(myParam);
}), state);
Run Code Online (Sandbox Code Playgroud)