我们有一些使用任务获取数据的模型,我一直在做一些测试,并注意到后台任务可以修改UI(STA线程)元素。以前不是这种情况。 VS 2017或.net 4.7有什么变化吗?
public class FancyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _state;
public FancyModel(ILongRunningOperation opGetter)
{
Task.Run(() =>
{
State = opGetter.LongRunningOperation();
});
}
public string State
{
get { return _state; }
set {
_state = value;
PropertyChanged?.Invoke(this, nameof(State));
}
}
}
答案 0 :(得分:0)
这段代码实际上并没有等待返回的方法。 长操作将在单独的后台池线程上运行,并且当它返回时将更新Status值。 它的火和忘记了场景。 当有可能我们想要使用的对象属于当前线程的另一个线程时,通常使用调度程序。违反时线程亲和性的原则我们使用调度程序。 最后一个是可疑的线程代码 创建不同的手动线程并尝试调用代码片段以模拟场景。例如,在当前场景中,从主线程以外的其他线程创建视图模型并尝试执行。 人们可以观察特定于线程的异常。 新版本没有变化。您认为的网络版本。 有关详细信息,请参阅此 https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/