代码之家  ›  专栏  ›  技术社区  ›  Magnus Johansson

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

  •  6
  • Magnus Johansson  · 技术社区  · 15 年前

    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;
        });
      });
    }
    


    Must create DependencySource on same Thread as the DependencyObject.

    我正在使用mvvmlighttoolkit框架。我还试图将结果作为一条消息发送,但结果是相同的错误消息。有什么想法或建议吗?

    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; }
    }
    

    我换了衣服 BitmapImage byte[] 数据类型。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ragoczy    15 年前

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

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

        2
  •  4
  •   nathan_hc    15 年前

    Dispatcher.CurrentDispatcher 进入之内 Application.Current.Dispatcher