如何在列表视图中打开图像时删除它?

问题描述 投票:0回答:1

我正在尝试使用athis列表视图显示文件夹中的图像

public void LoadData()
{
    var imgList = Directory.GetFiles(directoryPath, "*.jpg", 
    SearchOption.AllDirectories);
    myListView.ItemsSource = imgList;
}

ListView ItemTemplate是一个图像和一个删除图像的按钮按钮的点击事件的处理如下]

private void DeleteImg(object sender, RoutedEventArgs e)
{
    string delImg = (string)(sender as Button).DataContext;
    File.Delete(delImg);
    LoadData();
}

尝试删除图像时出现以下错误

System.IO.IOException:'该进程无法访问文件'xyz',因为它正在被另一个进程使用。'

xyz显然是文件名

我认为是因为图像在ListView中打开关于如何在删除文件之前将其关闭的任何想法

我尝试过的:

我尝试过

myListView.ItemsSource = null;
myListView.Items.Clear();
before delete
also:
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
c# file-io delete-file
1个回答
0
投票

我发现了它并且起作用了;

public void LoadData()
{
var imgList = Directory.GetFiles(directoryPath, "*.jpg", SearchOption.AllDirectories);
myListView.ItemsSource = imgList;
foreach (string f in imgList)
            {

                var bi = new BitmapImage();
                bi.BeginInit();
                bi.CacheOption = BitmapCacheOption.OnLoad;
                bi.UriSource = new Uri(f);
                imgLister.Add(bi);
                bi.EndInit();
                bi.Freeze();
            }
}

Freeze()方法释放内存,并允许删除文件

热门问题
推荐问题
最新问题