WPF无法从代码中删除图像.IOException
本文关键字:删除 图像 IOException 代码 WPF | 更新日期: 2023-09-27 18:14:46
我可能读了所有关于这个的帖子。似乎找不到问题所在。这是我的收藏
private ObservableCollection<BitmapImage> _imageList = new ObservableCollection<BitmapImage>();
这是我加载图像的方式
foreach (string filepath in temp) //populate image collection
{
BitmapImage tempImg = new BitmapImage();
tempImg.BeginInit();
tempImg.CacheOption = BitmapCacheOption.OnLoad;
tempImg.UriSource = new Uri(filepath);
tempImg.EndInit();
_imageList.Add(tempImg);
}
当我试图删除时,异常发生在行,文件正在使用中。
if (File.Exists(_imageList[SelectedItem].UriSource.AbsolutePath.ToString()))
{
int temp = SelectedItem;
//_imageList.RemoveAt(temp);
Console.WriteLine(_imageList[temp].UriSource.AbsolutePath.ToString());
File.Delete(_imageList[temp].UriSource.AbsolutePath.ToString());
}
例外:
System.IO类型的异常。在mscorlib.dll中发生IOException,但未在用户代码中处理。
附加信息:进程无法访问文件'e:'pix'img.jpg',因为它正在被其他进程使用。
谁能重新打开它?我找出了问题,它不是这个代码,它是在视图的部分,我想张贴一个答案。
从列表中删除临时的第th项,然后立即重用它。如果列表中有足够的项,就会删除错误的文件。否则你会得到一个IndexOutOfRangeException。
此外,UriSource。AbsolutePath是一个字符串,那么使用ToString()就没有意义了。
从发布的代码中无法看出为什么文件可能正在使用。请检查是否有其他应用程序(或者您在其他地方)保持文件打开。
但是这个异常说了什么呢?它在哪一行代码中被触发?我敢打赌,你的BitmapImage持有文件,这就是为什么你不能删除它,你应该首先处理它。
有时WPF只是保存文件,在这种情况下,最好只是存储文件中的字节,而不去管它,比如:
private BitmapImage loadImage(string imgPath)
{
BitmapImage myRetVal = null;
if (imgPath != null)
{
BitmapImage img = new BitmapImage();
using (FileStream stream = File.OpenRead(imgPath))
{
img.BeginInit();
img.CacheOption = BitmapCacheOption.OnLoad;
img.StreamSource = stream;
img.EndInit();
}
myRetVal = image;
}
return myRetVal;
}