我正在构建一个WPF程序,它使用Image对象进行图像采集,处理和显示。目前我从c ++中召唤一个新线程进行采集和处理,然后通过回调更新Image。
当我在回调中访问Image.source时,它会抛出类似“无法访问此对象,因为另一个线程拥有它”的异常。我试图在STA线程中构造Image并访问Image.source但是发生了同样的异常。我该怎么处理这个?
非常感谢。
答案 0 :(得分:1)
如果在后台线程上创建ImageSource,则可以调用其Freeze
方法使其跨线程访问。
然后,您可以通过调用Source
在UI线程中设置Image控件的Dispacher.Invoke
属性:
var bitmap = new BitmapImage();
bitmap.BeginInit();
...
bitmap.EndInit();
bitmap.Freeze();
image.Source.Dispatcher.Invoke(() => image.Source = bitmap);
答案 1 :(得分:-2)
"msg": "hi",
"attributes": {
"sticker": "",
"images": [
"94507a424a69870f090855274902bb7c.jpeg"
]
OR
if (InvokeRequired)
{
this.Invoke(new Action<source>(ImageObject), new object[] {value});
return;
}
OR
Invoke((MethodInvoker)delegate {
MainForm.UpdateImageSource(source);
});