首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >属性在使用Task.Run时未设置

属性在使用Task.Run时未设置
EN

Stack Overflow用户
提问于 2017-11-17 14:03:25
回答 1查看 284关注 0票数 1

供应商被绑在一个组合框上。

代码语言:javascript
运行
复制
//This works, Vendor is set
LoadVendors();
Vendor = Vendors.FirstOrDefault();

我希望LoadVendors()在一个单独的线程中运行,但是没有设置Vendor。有人能帮忙吗?

代码语言:javascript
运行
复制
//Doesn't work, Vendor is not set!
System.Threading.Tasks.Task.Run(() => LoadVendors()).ContinueWith((t) => Vendor = Vendors.FirstOrDefault());

供应商

代码语言:javascript
运行
复制
public ObservableCollection<Vendor> Vendors
    {
        get
        {
            return _vendors;
        }

        set
        {
            if (_vendors != value)
            {
                var oldVendors = new ObservableCollection<Vendor>(_vendors);
                _vendors = value;
                RaisePropertyChanged(nameof(Vendors), oldVendors, Vendors, true);
            }

        }
    }

LoadVendors

代码语言:javascript
运行
复制
private void LoadVendors()
    {

            var vendors = DataHelper.GetVendors()
            DispatcherHelper.CheckBeginInvokeOnUI(() => Vendors.Clear());
            vendors.ForEach(dcpV =>
            {                    
                DispatcherHelper.CheckBeginInvokeOnUI(() => Vendors.Add(vendor));
            });
            RaisePropertyChanged(nameof(Vendors));

    }   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-17 14:16:25

在后台线程上调用DataHelper.GetVendors方法,并在UI线程上执行其他所有操作:

代码语言:javascript
运行
复制
Task.Factory.StartNew(()=> DataHelper.GetVendors())
    .ContinueWith(task => 
    {
        Vendors.Clear();
        foreach (var vendor in task.Result)
            Vendors.Add(vendor);
        RaisePropertyChanged(nameof(Vendors));
        Vendor = Vendors.FirstOrDefault();
    }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47352418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档