Я использую Visual Studion 2010 (Net 4.0)
Я создаю задачу, которая загружает некоторые значения в ObservableCollection и после этого возвращается в пользовательский интерфейс. Это код:
LoadValues = Task.Factory.StartNew<ObservableCollection<DataGridEntity>>(curDataLoader.LoadValuesTask);
ItemsList = LoadValues.Result;
this.DataContext = ItemsList;
Этот фрагмент кода работает отлично! Но со свойством .Result поток пользовательского интерфейса ждет, пока не вернется задача LoadValues.
Поэтому я хочу сделать это так:
LoadValues = Task.Factory.StartNew<ObservableCollection<DataGridEntity>>(curDataLoader.LoadValuesTask);
LoadValues.ContinueWith((FinishLoadDataToDataGrid1) =>
{
ItemsList = LoadValues.Result;
this.DataContext = ItemsList;
});
Очень небольшая разница. Я использовал ContinueWith, чтобы предотвратить ожидание потока пользовательского интерфейса.
Но если я делаю это таким образом, он говорит мне: «Вызывающий поток не может получить доступ к объекту, потому что другой поток владеет им» по адресу this.DataContext = ItemsList; "
Это проблема времени? У кого-нибудь есть идеи?