Xamarin 切换到ShouldAlwaysRaiseInputConUserInterfaceThread(false)MVVMCross
我们正在从MVVMCross 4.1过渡到4.4。我们要考虑的主要问题之一是在4.2中引入的MVxtaskBaseButin上下文。 上面说 要充分利用MvxTaskBasedBindingContext,您应该 同时调用shouldallwaysraiseinpconuserinterfacethread(false);在 ViewModel构造函数 MvxTaskBasedBindingContext听起来是件好事,因此我们希望“充分利用”它。然而,毫不奇怪,不再总是在UI线程上引发INotifyPropertyChanged会给我们带来大量的线程编组错误 “应用程序调用了为不同线程封送的接口” 是否有一种建议的方法可以移动到shouldallwaysraiseinpconuserinterfacethread(false)模型,并且仅在某些场景下才值得使用?如果您查看Xamarin 切换到ShouldAlwaysRaiseInputConUserInterfaceThread(false)MVVMCross,xamarin,mvvmcross,Xamarin,Mvvmcross,我们正在从MVVMCross 4.1过渡到4.4。我们要考虑的主要问题之一是在4.2中引入的MVxtaskBaseButin上下文。 上面说 要充分利用MvxTaskBasedBindingContext,您应该 同时调用shouldallwaysraiseinpconuserinterfacethread(false);在 ViewModel构造函数 MvxTaskBasedBindingContext听起来是件好事,因此我们希望“充分利用”它。然而,毫不奇怪,不再总是在UI线程上引发INot
MvxNotifyPropertyChanged
的,您将看到默认情况下,RaisePropertyChanged
将PropertyChanged
事件封送到UI线程
因此,如果对PropertyChanged事件执行单元测试,它们可能会中断,因为没有调度程序。设置shouldlwaysraiseinpconuserinterfacethread(false)
将防止出现这种情况,提升将直接在此时的线程上完成
当您有意在另一个线程中订阅PropertyChanged
时,这也很方便
如果需要,可以将其设置为false
,并在基础viewmodel类上创建一个方法来执行以下操作:
this.InvokeOnMainThread(()=>this.RaisePropertyChanged(propertyName))代码>
因此,您总是使用RaisePropertyChangedOnMainThread
(我们这样命名),并且不会发生线程编组错误
资料来源:
嗨