我在文档和其他几个地方看到Mono System.Collections.ObjectModel.ObservableCollection<T>
是&#34;不是线程安全的&#34;。我理解这意味着我不应该允许我的应用程序同时从多个线程调用Add()
之类的方法。但我很好奇,如果这意味着它具有线程亲和力,如Views。
我很久以前就做过WPF工作,我记得它在WPF中具有线程亲和力,甚至抛出一个特定的异常而没有提升它的事件。但我也注意到,当我更新绑定时,Xamarin Forms似乎会自动将VM属性更改传输到UI线程,我不认为WPF会这样做。
所以我设置了一个示例Xamarin.Forms项目并将ListView
绑定到ObservableCollection
。我写了一些代码来在UI线程上添加一些项目,以及一些代码将它们添加到工作线程上。为了比较,我还编写了一个方法,用于从工作线程设置Label的文本。两种方式都可以更新ObservableCollection工作。点击更新标签的按钮会使应用程序崩溃。
这将似乎来证明没有线程关联,并且Xamarin Forms绑定在正确的线程上处理事件。但我也习惯于将亲和力问题排除在某种程度上无法预测,所以我可能会变得很幸运#34;
有没有明确的答案?我可以从任何线程更新绑定的ObservableCollection,只要我注意到单独的同步问题吗?
答案 0 :(得分:0)
Mono ObservableCollection不是线程安全的,但没有线程关联,如果以非并发方式从不同的线程访问,则不应该崩溃。