如何处理MVVM中并行化任务的ObservableCollection <>结果?

Mag*_*son 6 c# data-binding multithreading mvvm mvvm-light

我在一个单独的任务中收集数据,我想使用一个数据将结果数据绑定到GUI组件ObservableCollection<>.所以我的代码是这样的:

private ObservableCollection<MyItem> _items;
public ObservableCollection<MyItem> Items
{
  get { return _items; }
  set
  {
    if (_items.Equals(value))
    {
      return;
    }
    _items = value;
    RaisePropertyChanged("Items");
  }
}

private void LoadData()
{
  Task task = Task.Factory.StartNew(() =>
  {
    ObservableCollection<MyItem> itms = _htmlParser.FetchData(...);

    Dispatcher.CurrentDispatcher.Invoke((Action)delegate
    {
      Items = itms;
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

从执行某些HTTP请求的组件中获取数据.我得到的错误是:
Must create DependencySource on same Thread as the DependencyObject.

我正在使用MVVM Light工具包框架.我还尝试将结果作为消息发送,但最终出现在同一错误消息中.任何想法或指针?

编辑:这是问题:

public class MyItem
{
  public string Id { get; set; }
  public string Name { get; set; }
  public BitmapImage Image { get; set; }  // <--- A big No No because it inherits from the DependencyObject
  public Uri Uri { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我将其更改BitmapImagebyte[]数据类型.

Rag*_*czy 1

您收到的异常(“必须在与 DependencyObject 相同的线程上创建 DependencySource”)表明正在后台线程上创建某些内容并在 UI 线程上使用。是否有任何 UI 控件正在创建并存储在集合中以供 UI 使用?

我看到 ObservableCollection 本身是在后台线程上创建的,但我认为这不是问题 - 不幸的是我不在办公室编写代码并确认这一点。