我需要從(後臺)線程列表中讀取,而它可能會從另一個(主線程)更新。所以我試圖做一個臨時列表不要訪問原始對象。由於更新可能發生在多個地方,因此將SyncLock放置在讀取邏輯上會很方便。這本質上是錯誤的嗎?我正確鎖定這個選項的方法有哪些,或者其他方式在多線程條件下獲取列表的可訪問副本?多線程列表中的SyncLock仍然拋出ArgumentException
' 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和長度以及數組的下限。
你說的沒錯,我在提問這個問題時沒有正確地使用過SynckLock,所以現在清楚了,這個列表已經被其他線程修改了,沒有鎖,就像你說的那樣。感謝更新! – bretddog 2012-07-28 20:37:39