我在尝试此操作时收到错误消息:
Task.Factory
.StartNew(() => _model.GetItems(node).Select(n => n))
.ContinueWith(t =>
{
if (t.Result != null)
{
ObservableCollection<ItemValue> children = new ObservableCollection<ItemValue>(t.Result);
//fill some control
}
}, TaskScheduler.FromCurrentSynchronizationContext());
错误
必须在与dependencyobject相同的线程上创建dependencysource
但如果我尝试这段代码:
Task.Factory
.StartNew(() => _model.GetItems(node).Select(n => n))
.ContinueWith(t =>
{
if (t.Result != null)
{
ObservableCollection<ItemValue> children = _model.GetItems(node);
//fill some control
}
}, TaskScheduler.FromCurrentSynchronizationContext());
没关系,没有错误。
我做错了什么?
我想在另一个帖子中填写集合。
答案 0 :(得分:0)
要强制线程更改在其他线程中创建的UI元素的属性,必须使用任何UI元素的 Dispatcher 属性: http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherobject.dispatcher(v=vs.110).aspx
你可以简单地写一下:
Task.Factory.StartNew(async () =>
{
ObservableCollection<ItemValue> children = new ObservableCollection<ItemValue>(await _model.Dispatcher.InvokeAsync<IEnumerable<ItemValue>>(() => _model.GetItems(node)));
// fill some control
});