从WPF中的单独线程更新Image.source

时间:2017-08-26 08:32:53

标签: c# wpf multithreading

我正在构建一个WPF程序,它使用Image对象进行图像采集,处理和显示。目前我从c ++中召唤一个新线程进行采集和处理,然后通过回调更新Image。

当我在回调中访问Image.source时,它会抛出类似“无法访问此对象,因为另一个线程拥有它”的异常。我试图在STA线程中构造Image并访问Image.source但是发生了同样的异常。我该怎么处理这个?

非常感谢。

2 个答案:

答案 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); });