我需要从(后台)线程上的列表中读取,而它可能会从另一个(主线程)更新。因此,我尝试仅制作一个临时列表以不访问原始对象。由于更新可能发生在多个位置,因此将 SyncLock 放在读取逻辑上会很方便。这本身就是错误的吗?我有哪些选项可以正确锁定它,或者以其他方式在多线程条件下获取列表的可访问副本?
' In Main thread:
Public SomeList = New List(Of SomeClass)
' ..edit list
' In other thread:
Dim tempList As List(Of SomeClass)
SyncLock SomeList
tempList = SomeList.ToList
End SyncLock
SomeList.ToList抛出:
ArgumentException,目标数组不够长。检查 destIndex 和长度,以及数组的下限。