3

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

    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 上显示相同?

4

1 回答 1

6

BmpImg在后台线程上创建。您不能绑定到Image Source DP在 UI 线程以外的线程上创建的对象。

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

因此,您需要做的就是BmpImg通过 Dispatcher 在 UI 线程上创建。

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

或者

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

BmpImg.Freeze()
于 2014-01-06T17:09:29.400 回答