gpt4 book ai didi

xamarin - 切换到 ShouldAlwaysRaiseInpcOnUserInterfaceThread(false) MVVMCross

转载 作者:行者123 更新时间:2023-12-02 12:10:09 24 4
gpt4 key购买 nike

我们正在从 MVVMCross 4.1 迁移到 4.4。我们要考虑的主要事情之一是 4.2 中引入的 MvxTaskBasedBindingContext。

MVVMCross 4.2 docs它说

To take full advantage of the MvxTaskBasedBindingContext, you should also call ShouldAlwaysRaiseInpcOnUserInterfaceThread(false); in the ViewModel constructor.

MvxTaskBasedBindingContext 听起来像是一件好事,因此我们希望“充分利用”它。然而,不出所料,不再总是在 UI 线程上引发 INotifyPropertyChanged 会给我们带来大量线程编码错误

应用程序调用了为不同线程编码的接口(interface)

是否有建议的方法可以迁移到 ShouldAlwaysRaiseInpcOnUserInterfaceThread(false) 模型,并且仅在某些情况下才值得?

最佳答案

如果你看一下implementationMvxNotifyPropertyChanged 中,您将看到 RaisePropertyChanged 默认情况下将 PropertyChanged 事件编码到 UI 线程。

因此,如果您对 PropertyChanged 事件执行单元测试,它们可能会中断,因为没有 Dispatcher。设置 ShouldAlwaysRaiseInpcOnUserInterfaceThread(false) 将防止出现这种情况,并且提升将直接在您当时所在的线程上完成。

当您有意在另一个线程中订阅 PropertyChanged 时,这也很方便。

如果您愿意,可以将其设置为 false 并在基本 View 模型类上创建一个方法来执行以下操作:

this.InvokeOnMainThread(() => this.RaisePropertyChanged(propertyName));

因此,您始终使用 RaisePropertyChangedOnMainThread (让我们这样命名),并且不会发生线程编码错误。

来源:http://www.damirscorner.com/blog/posts/20140324-HandlingPropertyChangedEventInMvvmCrossViewModelUnitTests.html

关于xamarin - 切换到 ShouldAlwaysRaiseInpcOnUserInterfaceThread(false) MVVMCross,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com