【问题标题】:Does Mono ObservableCollection have thread affinity?Mono ObservableCollection 是否具有线程亲和力?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2019-08-08
      • 2013-03-19
      相关资源
      最近更新 更多