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
有机会完成其工作之前抛出的......如果有人知道另一种解决此问题的方法,该方法不涉及迭代源集合并将所有图像设置为冻结,请告诉我。