IValueConverter应该冻结图像以使跨线程安全绑定无法正常工作

时间:2016-02-14 17:10:29

标签: c# wpf ivalueconverter

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

  

必须在与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();
    }
}

1 个答案:

答案 0 :(得分:0)

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