我目前正在处理线程问题,希望有人能清楚地解释如何解决以下错误。
我有一个全局 Dictionary<string, BitmapImage> dic
我在主线程中实例化。
主线程创建一个子线程来用图像填充字典。
然后主线程尝试访问字典并抛出异常
The calling thread cannot access this object because a different thread owns it
我访问字典本身没有问题,例如dic.ContainsKey("key")
工作正常,就在我尝试访问 BitmapImage
时在发生错误的词典中。
我猜这是因为存储在字典中的 BitmapImages 在子线程中被实例化并且它导致了一个问题 - 我有什么想法可以解决这个问题吗?
我在这里查看了大量的线程教程和建议,但似乎其他地方都在告诉您如何从子线程访问父线程对象,而我正试图做相反的事情。
谢谢。
最佳答案
通常,您只能从创建它们的线程访问 UI 元素。这意味着,您应该确保主线程正在自行创建 BitmapImage
对象。
但是,在这种情况下,您可能会利用这样一个事实,即 BitmapImage
可以在不同线程被卡住后使用(使用 Freeze() 方法)。因此,您可以尝试在子线程上创建图像,卡住它们,然后将它们添加到您的字典中(确保以线程安全的方式进行,例如在访问字典之前锁定一些互斥对象)。
更多信息可以在 Freezeable Objects Overview 上找到网站。
关于c# - 访问在子线程中实例化的字典项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245523/