C# 异步缩略图转换器

C# 异步缩略图转换器,c#,wpf,C#,Wpf,我对WPF的缩略图创建有问题。虽然我可以在不同的线程中创建缩略图和图像,但我无法将其传输到主UI线程 转换成缩略图的过程已经完成,所以这不再是一个问题;我现在就是这样做的: public ImageSource Image { get { BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.DecodePixelWidth = 100; bi.CacheOption = B

我对WPF的缩略图创建有问题。虽然我可以在不同的线程中创建缩略图和图像,但我无法将其传输到主UI线程

转换成缩略图的过程已经完成,所以这不再是一个问题;我现在就是这样做的:

public ImageSource Image
{
    get
    {
      BitmapImage bi = new BitmapImage();

      bi.BeginInit();
      bi.DecodePixelWidth = 100;
      bi.CacheOption = BitmapCacheOption.OnLoad;
      bi.UriSource = new Uri(value.ToString());
      bi.EndInit();

      return bi;
    }
}

<Image Source="{Binding Image, IsAsync=True}"/>
公共图像源图像
{
得到
{
BitmapImage bi=新的BitmapImage();
bi.BeginInit();
双像素宽度=100;
bi.CacheOption=BitmapCacheOption.OnLoad;
bi.UriSource=新Uri(value.ToString());
bi.EndInit();
返回bi;
}
}

如何将缩略图传递到主线程?

提前多谢

要使BitmapImage跨线程可访问,必须将其冻结。您还应该保留创建的BitmapImage,以防多次调用getter

private BitmapImage image;

public ImageSource Image
{
    get
    {
        if (image == null)
        {
            image = new BitmapImage();
            image.BeginInit();
            image.DecodePixelWidth = 100;
            image.CacheOption = BitmapCacheOption.OnLoad;
            image.UriSource = new Uri(value.ToString());
            image.EndInit();
            image.Freeze(); // here
        }
        return image;
    }
}

我还强烈建议不要在
Image
属性getter中创建BitmapImage。绑定基础结构可能会多次访问该属性,这将在每次调用时创建一个新的BitmapImage。我以前在转换中尝试过它,但它无法异步工作。你对如何解决这件事有什么建议吗?哪一个“转换”?您的代码显示只读属性。在BitmapImage上调用
Freeze()
将使其可以跨线程访问。我的第一个想法是:创建缩略图im转换器。请不要在注释中发布代码。编辑您的问题,或询问其他问题。此外,即使绑定设置为异步,也会同步调用绑定转换器。只有属性getter被异步调用。谢谢Clemens,这是它的工作。