我们正在从MVVMCross 4.1迁移到4.4。我们要考虑的主要事情之一是4.2中引入的MvxTaskBasedBindingContext。
要充分利用MvxTaskBasedBindingContext,您应该这样做 也调用ShouldAlwaysRaiseInpcOnUserInterfaceThread(false);在里面 ViewModel构造函数。
MvxTaskBasedBindingContext听起来像是一件好事,因此我们想要充分利用它。然而,不出所料,不再总是在UI线程上提升INotifyPropertyChanged给我们提供了大量的线程编组错误
“应用程序称为为不同线程编组的接口”
是否有建议的方法转移到ShouldAlwaysRaiseInpcOnUserInterfaceThread(false)模型,在某些情况下是否值得?
答案 0 :(得分:0)
如果您查看MvxNotifyPropertyChanged
中的implementation,则会发现RaisePropertyChanged
默认将PropertyChanged
事件编组到UI线程。
因此,如果您要对PropertyChanged事件执行单元测试,则它们可能会中断,因为没有Dispatcher
。设置ShouldAlwaysRaiseInpcOnUserInterfaceThread(false)
可以防止这种情况,并且加薪将直接在您当时所在的线程上进行。
当您故意在另一个线程中订阅PropertyChanged
时,这也很方便。
如果需要,可以将其设置为false
并在基本viewmodel类上创建要执行的方法:
this.InvokeOnMainThread(() => this.RaisePropertyChanged(propertyName));
因此,您始终使用RaisePropertyChangedOnMainThread
(这样命名),并且不会发生线程编组错误。
HIH