是否不再需要通过Application.Dispatcher.Current.Invoke设置UI元素?

时间:2017-07-14 17:14:40

标签: c# wpf mvvm visual-studio-2017 .net-4.7

我们有一些使用任务获取数据的模型,我一直在做一些测试,并注意到后台任务可以修改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)); 
          }
    }
}

1 个答案:

答案 0 :(得分:0)

这段代码实际上并没有等待返回的方法。 长操作将在单独的后台池线程上运行,并且当它返回时将更新Status值。 它的火和忘记了场景。 当有可能我们想要使用的对象属于当前线程的另一个线程时,通常使用调度程序。违反时线程亲和性的原则我们使用调度程序。 最后一个是可疑的线程代码 创建不同的手动线程并尝试调用代码片段以模拟场景。例如,在当前场景中,从主线程以外的其他线程创建视图模型并尝试执行。 人们可以观察特定于线程的异常。 新版本没有变化。您认为的网络版本。 有关详细信息,请参阅此 https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/