属性 使用 Task.Run 时未设置
Property not set when using Task.Run
供应商绑定到组合框
//This works, Vendor is set
LoadVendors();
Vendor = Vendors.FirstOrDefault();
我想在单独的线程中将 LoadVendors() 运行,但未设置供应商。有人可以帮忙吗?
//Doesn't work, Vendor is not set!
System.Threading.Tasks.Task.Run(() => LoadVendors()).ContinueWith((t) => Vendor = Vendors.FirstOrDefault());
供应商
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
private void LoadVendors()
{
var vendors = DataHelper.GetVendors()
DispatcherHelper.CheckBeginInvokeOnUI(() => Vendors.Clear());
vendors.ForEach(dcpV =>
{
DispatcherHelper.CheckBeginInvokeOnUI(() => Vendors.Add(vendor));
});
RaisePropertyChanged(nameof(Vendors));
}
在后台线程上调用 DataHelper.GetVendors
方法,然后在 UI 线程上执行其他所有操作:
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());
供应商绑定到组合框
//This works, Vendor is set
LoadVendors();
Vendor = Vendors.FirstOrDefault();
我想在单独的线程中将 LoadVendors() 运行,但未设置供应商。有人可以帮忙吗?
//Doesn't work, Vendor is not set!
System.Threading.Tasks.Task.Run(() => LoadVendors()).ContinueWith((t) => Vendor = Vendors.FirstOrDefault());
供应商
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
private void LoadVendors()
{
var vendors = DataHelper.GetVendors()
DispatcherHelper.CheckBeginInvokeOnUI(() => Vendors.Clear());
vendors.ForEach(dcpV =>
{
DispatcherHelper.CheckBeginInvokeOnUI(() => Vendors.Add(vendor));
});
RaisePropertyChanged(nameof(Vendors));
}
在后台线程上调用 DataHelper.GetVendors
方法,然后在 UI 线程上执行其他所有操作:
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());