質問

私は別のタスクでデータを収集していると私はデータにしたいObservableCollection<>を使用してGUIコンポーネントに結果をバインドします。だから私のコードは次のようになります:

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;
    });
  });
}
データは、いくつかのHTTPリクエストを行うコンポーネントから取得されます。私は取得していますエラーは次のとおりです。
Must create DependencySource on same Thread as the DependencyObject.

私はMVVMライトツールキットフレームワークを使用しています。私はまた、メッセージとして結果を送信しようとしたが、それは同じエラーメッセージで終わりました。任意のアイデアやポインタ?

編集:ここで問題があります:

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

IはBitmapImageデータ型にbyte[]を変更します。

役に立ちましたか?

解決

あなたが取得している例外は、(「のDependencyObjectと同じスレッド上でDependencySourceを作成する必要があります」)はその何かのバックグラウンドスレッド上で作成し、UIスレッド上で使用されていることを示します。 UIによって作成され、使用のためにコレクションに格納されている任意のUIコントロールがありますか?

私はのObservableCollection自体はバックグラウンドスレッドで作成されていることがわかり、私はそれが問題だとは思わない - 残念ながら私はそのコードと確認するために、オフィスにいないよ。

他のヒント

あなたがいないことを確認これについてDispatcher.CurrentDispatcherApplication.Current.Dispatcherを交換しようとすることができますが、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top