c # tpl, проблемы с продолжением: «Вызывающий поток не может получить доступ к объекту, потому что он принадлежит другому потоку»

Я использую Visual Studion 2010 (Net 4.0) Я создаю задачу, которая загружает некоторые значения в ObservableCollection и после этого возвращается в пользовательский интерфейс. Это код:

LoadValues = Task.Factory.StartNew<ObservableCollection<DataGridEntity>>(curDataLoader.LoadValuesTask);
ItemsList = LoadValues.Result;
this.DataContext = ItemsList;

Этот фрагмент кода отлично работает! Но со свойством .Result UI-поток ждет, пока не вернется задача LoadValues. Итак, я хочу сделать это таким образом:

LoadValues = Task.Factory.StartNew<ObservableCollection<DataGridEntity>>(curDataLoader.LoadValuesTask);
LoadValues.ContinueWith((FinishLoadDataToDataGrid1) =>
{
   ItemsList = LoadValues.Result;
   this.DataContext = ItemsList;
});

Очень небольшая разница. Я использовал ContinueWith, чтобы поток пользовательского интерфейса не ждал. Но если я сделаю это таким образом, он скажет мне: «Вызывающий поток не может получить доступ к объекту, потому что он принадлежит другому потоку» в «this.DataContext = ItemsList;»

Это проблема времени? У кого-нибудь есть идеи?

0
задан manton 2 February 2012 в 13:30
поделиться