C# 从Xamarin中的UITableViewSource线程安全访问集合

C# 从Xamarin中的UITableViewSource线程安全访问集合,c#,xamarin,xamarin.ios,C#,Xamarin,Xamarin.ios,我使用observateCollection来存储数据(这是必要的,因为它用于UWP项目中的数据绑定)。由于observateCollection不是线程安全的,我使用SemaphoreSlim来确保只有一个线程可以访问它 除了UITableViewSource之外,这几乎在所有情况下都有效。如果我同时实现了EstimatedHeight和GetHeightForRow,则会出现问题-由于这两种方法都需要访问集合,因此似乎存在一些冲突,应用程序变得相当无响应。我假设这些任务之间存在某种程度的并发

我使用
observateCollection
来存储数据(这是必要的,因为它用于UWP项目中的数据绑定)。由于
observateCollection
不是线程安全的,我使用
SemaphoreSlim
来确保只有一个线程可以访问它

除了
UITableViewSource
之外,这几乎在所有情况下都有效。如果我同时实现了
EstimatedHeight
GetHeightForRow
,则会出现问题-由于这两种方法都需要访问集合,因此似乎存在一些冲突,应用程序变得相当无响应。我假设这些任务之间存在某种程度的并发性


现在,我已经决定将
信号量lim
仅放在一种方法中,并冒一些罕见的崩溃风险,应用程序正在正常工作,但我非常确定应该有某种方法可以安全地访问这些值。有人对此有解决方案吗?

据我所知,您正在使用ObservableCollection,以便在更改数据后立即在UI上更新数据。我说的对吗?@Gleb是的,但在这种情况下,我认为没有必要重现这个问题,我认为上面已经提到了所需的一切。您只能从主线程更新UI。这意味着您只能在一个线程内从集合中添加/删除项目。那么,在您的情况下,它怎么不是线程安全的呢?@Gleb,我同意一个可能的解决方案是将此集合中的所有操作移动到UI线程,尽管它还应该包括分配集合时的情况,因为它也可以被分配,而不仅仅是可以添加和删除成员,最后是在访问集合时,默认情况下不一定需要在UI线程上。你可以把答案贴出来,我一定会投赞成票的。Idl为什么,但我以为我们在讨论UWP。我已经删除了我的答案。对不起,误会了。