所以在我的DoWork的,我有BackgroundWorker的 - 調用線程不能訪問對象
List<KeyValuePair<String, BitmapImage>> Files = new List<KeyValuePair<string,BitmapImage>>((List<KeyValuePair<String, BitmapImage>>)e.Argument);
foreach (KeyValuePair<String, BitmapImage> i in Files)
{
string temp = i.ToString(); .......(1)
//.....
}
我傳遞的參數如下: -
backgroundWorkerForReupload.RunWorkerAsync(files);
其中 「文件」 是List<KeyValuePair<string, BitmapImage>>
在上面第(1)行,它拋出一個InvalidOperationException
消息:「調用線程不能訪問這個對象,因爲不同的線程擁有它「
我很困惑,爲什麼i
被另一個線程所擁有。任何幫助將不勝感激。謝謝。
他們是如何加載的?他們是否用於其他任何事情?最可能的原因是它們以某種方式與主UI線程相關聯。 – toad
'e.Argument'是來自哪裏。爭論來自調用線程。因此,儘管您正在創建一個新的鍵值對列表,但這些對中包含的數據不會被複制,而會被引用,並在另一個線程上。仍然沒有解釋爲什麼線程安全調用ToString失敗。 –
@toad原始列表正在UI線程中使用,但「文件」是使用新關鍵字(在DoWork()方法中)創建的。那麼它不應該是後臺線程擁有的列表的新副本嗎? – AyushISM