我正在运行Visual Studion 2010(Net 4.0) 我正在创建一个任务,将一些值加载到ObservableCollection中并返回之后的用户界面。这是代码:c#tpl,继续出现问题“调用线程无法访问对象,因为不同的线程拥有它”
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来防止UI线程等待。 但是,如果我这样做,他告诉我:“调用线程无法访问对象,因为不同的线程拥有它”在“this.DataContext = ItemsList;”
它是一个计时问题?有没有人有任何想法?
完美!我不知道为什么,但它是帽子。谢谢! – manton 2012-02-02 15:36:24