【发布时间】:2016-10-14 15:32:56
【问题描述】:
我在文档和其他几个地方看到 Mono System.Collections.ObjectModel.ObservableCollection<T> 是“不是线程安全的”。我理解这意味着我不应该让我的应用程序同时从多个线程调用像 Add() 这样的方法。但我很好奇这是否意味着它具有线程关联性,例如 Views。
我很久以前做过 WPF 工作,我记得它在 WPF 中具有线程关联性,甚至抛出特定异常而没有引发其事件。但我也注意到,当我更新绑定时,Xamarin Forms 似乎会自动将 VM 属性更改传输到 UI 线程,而我认为 WPF 没有这样做。
所以我设置了一个示例 Xamarin.Forms 项目并将ListView 绑定到ObservableCollection。我写了一些代码来在 UI 线程上添加一些项目,以及一些代码来在工作线程上添加它们。为了比较,我还编写了一个从工作线程设置标签文本的方法。两种更新 ObservableCollection 的方法都有效。点击更新标签的按钮会使应用程序崩溃。
这将似乎证明没有线程关联,并且 Xamarin Forms 绑定在正确的线程上处理事件。但我也习惯于线程亲和力问题有些不可预测,所以我可能只是“走运”。
有确定的答案吗?我可以从任何线程更新绑定的 ObservableCollection,只要我注意单独的同步问题吗?
【问题讨论】:
标签: mono xamarin.forms