错误:调用线程无法访问此对象,因为另一个线程拥有它

我收到这个错误。 这是代码:

Image image; BitmapImage BmpImg; MemoryStream ms; public void Convert() { ms = new MemoryStream(); image.Save(ms, ImageFormat.Jpeg); BmpImg = new BitmapImage(); BmpImg.BeginInit(); BmpImg.StreamSource = new MemoryStream(ms.ToArray()); BmpImg.EndInit(); } private void Btn_Click(object sender, RoutedEventArgs e) { Dispatcher.Invoke(new Action(() => { Image.Source = BmpImg; })); } 

如何将System.Drawing.Image转换为BitmapImage并在wpf上显示相同的内容?

BmpImg是在后台线程上创建的。 您无法绑定在UI线程以外的线程上创建的Image Source DP对象。

由于您使用的是Dispatcher ,我现在假设您如何在UI线程上委托内容。

所以你需要做的就是通过Dispatcher在UI线程上创建BmpImg

您也可以像这样获得UI调度程序 – App.Current.Dispatcher

要么

正如@Clemens在评论中建议的那样,如果你在BitmapImage实例上调用Freeze() ,你可以跨线程访问它。

 BmpImg.Freeze()