gpt4 book ai didi

mvvm - 在 Xamarin Forms 中设置 ViewModel 属性是否具有线程关联性?

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

前几天,在一次代码审查中,我看到了一些关于从工作线程设置属性的安全性的问题。一位同事评论说,“此属性绑定(bind)到 UI,数据绑定(bind)是线程安全的。”

我使用 XF 已经有一段时间了,但一直认为这不是真的:如果我想更新绑定(bind)到 UI 的 ViewModel 属性,我必须在 UI 线程上进行这些更改。我只是花了几分钟浏览文档,除了直接操作 BindableProperties 具有线程亲和力之外,我没有看到明显的答案。这对我来说是否是阻塞的 UI 线程执行也很重要。

我可以自己做一个项目来测试它,但这类问题似乎总是断断续续的,所以我想知道我只是缺少正确的文档。

(这与调查我们看到的主要发生在 Xamarin 调用堆栈中的崩溃有关。我们从工作线程引发事件,VM 处理该事件并更新一些属性。如果为 UI 线程安排了该事件,则可能有一些我们没有准备好的交错问题,我离解决崩溃问题更近了。如果没有为 UI 线程安排它......我很惊讶它工作了这么长时间。)

最佳答案

I've been using XF for a while, but always assumed this wasn't true: that if I wanted to update ViewModel properties bound to the UI I'd have to make those changes on the UI thread.



你是对的。 100% 正确。您可以使用 Device.InvokeOnMainThread()为了这。

完整地说,有一种情况无关紧要:PropertyChanged

https://github.com/xamarin/Xamarin.Forms/blob/b645064/Xamarin.Forms.Core/BindingExpression.cs#L542

在这种情况下, Binding应用于主(UI)线程。

关于mvvm - 在 Xamarin Forms 中设置 ViewModel 属性是否具有线程关联性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839063/

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