Mono ObservableCollection 是否具有线程关联性?

Does Mono ObservableCollection have thread affinity?

我在文档和其他几个地方看到 Mono System.Collections.ObjectModel.ObservableCollection<T> 是 "not thread-safe"。我明白这意味着我不应该允许我的应用程序同时从多个线程调用 Add() 之类的方法。但我很好奇这是否意味着它具有线程亲和性,如视图。

我很久以前做过 WPF 工作,我记得它在 WPF 中具有线程亲和力,甚至抛出特定异常而没有引发其事件。但我也注意到,当我更新绑定时,Xamarin Forms 似乎会自动将 VM 属性 更改传输到 UI 线程,我认为 WPF 不会那样做。

所以我设置了一个示例 Xamarin.Forms 项目并将 ListView 绑定到 ObservableCollection。我写了一些代码在 UI 线程上添加一些项目,还有一些代码在工作线程上添加它们。为了进行比较,我还编写了一个从工作线程设置标签文本的方法。两种更新 ObservableCollection 的方法都有效。点击更新标签的按钮会使应用程序崩溃。

似乎 证明不存在线程关联,并且 Xamarin Forms 绑定在正确的线程上处理事件。但我也习惯于线程亲和性问题有些不可预测,所以我可以 "getting lucky".

有确定的答案吗?只要我注意单独的同步问题,我可以从任何线程更新绑定的 ObservableCollection 吗?

Mono ObservableCollection 不是线程安全的,但没有线程亲和性,如果以非并发方式从不同线程访问,则不应崩溃。