IValueConverter 这应该冻结图像以进行跨线程安全绑定不起作用

本文关键字:线程 安全 不起作用 绑定 冻结 图像 IValueConverter | 更新日期: 2023-09-27 18:34:42

我的图像绑定不断抛出此错误:

必须在与 DependencyObject 相同的线程上创建 DependencySource。

我写了一个我认为会解决的IValueConverter,但似乎不是。

public class FrozenImage : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ImageSource image = value as ImageSource;
        if (image != null)
        {
            if (image.Dispatcher != null)
            {
                if (image.Dispatcher.CheckAccess())
                {
                    ImageSource returnImage = new BitmapImage();
                    returnImage = image;
                    returnImage.Freeze();
                    return returnImage;
                } else return image.Dispatcher.Invoke(() => Convert(value, targetType, parameter, culture));
            } else return image;
        } else return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

我错过了什么还是这是不可能的?

还尝试了简化版本,因为不需要调度程序,这也具有相同的错误:

public class FrozenImage : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ImageSource image = value as ImageSource;
        if (image != null)
        {
            ImageSource returnImage = image.Clone();
            returnImage.Freeze();
            return returnImage;
        } else return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

IValueConverter 这应该冻结图像以进行跨线程安全绑定不起作用

显然这是不可能的,因为看起来异常是在IValueConverter有机会完成其工作之前抛出的......如果有人知道另一种解决此问题的方法,该方法不涉及迭代源集合并将所有图像设置为冻结,请告诉我。