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

我得到这个错误.这是代码:

    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将BmpImg的创建放在UI线程上.

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

要么

正如@Clemens在注释中建议的那样,如果在BitmapImage实例上调用Freeze(),则可以跨线程访问它.

BmpImg.Freeze()

转载注明原文:错误:调用线程无法访问此对象,因为另一个线程拥有它 - 代码日志