那么在我的DoWork中,我有:
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);
“files”是List<KeyValuePair<string, BitmapImage>>
类型。
在上面的第(1)行,它抛出一个InvalidOperationException
,并显示以下信息:“调用线程无法访问此对象,因为另一个线程拥有它。”
我困惑于为什么i
被另一个线程所拥有。任何帮助将不胜感激。谢谢。
e.Argument
是这个值的来源。这个参数来自调用线程。因此,即使您创建了一个新的键值对列表,其中包含的数据并没有被复制,而是在另一个线程上被引用。这仍然无法解释为什么对ToString
的线程安全调用会失败。 - Will Custode