Fork me on GitHub

WPF列表显示图片,删除列表同时删除文件的时候显示文件被占用无法删除

原因:因为列表里面的每一项都直接引用了文件路径,所以文件被锁住了,你想删也删不了

解决,数据加载的时候不要直接使用文件原地址,使用BitmapImage,并且设置CacheOption=OnLoad,读取到内存,读完马上释放

 

具体做法,在你的返回数据的实体类里面加一个BitmapImage字段和LoadImage方法,然后在页面列表数据加载的时候执行LoadImage方法,前台正常  ImageBrush 显示即可

private ImageSource _imageSource;
    public ImageSource ImageSource
    {
        get => _imageSource;
        set => SetProperty(ref _imageSource, value);
    }

// 加载图片方法
    public void LoadImage(string path)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(path, UriKind.Absolute);
        bitmap.CacheOption = BitmapCacheOption.OnLoad; // 非常关键
        bitmap.EndInit();
        bitmap.Freeze(); // 让图片可以跨线程访问,性能好
        ImageSource = bitmap;
    }

前台显示
<ImageBrush ImageSource="{Binding ImageSource}"/>

  

 

posted @ 2025-04-30 16:27  WantRemake  阅读(31)  评论(0)    收藏  举报