BackgroundWorker - 调用线程无法访问对象

时间:2014-01-24 20:57:59

标签: c# .net wpf multithreading backgroundworker

所以在我的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归另一个线程所有。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:4)

大多数WPF对象(包括BitmapImage)都是线程仿射的,只能由创建它们的线程使用。

您可以先致电BitmapImage,为Freeze()解决此问题。