我已经用listview
创建了imagelist
并具有删除功能,该功能将使用在列表视图上选择的文件名来删除/删除文件。
但是我得到一个错误,该文件正在被另一个进程使用。下面是我正在使用的代码:
//// Listview with Imagelist
private void listImages()
{
imageList.View = View.Details;
imageList.Columns.Add("Images", 650);
ImageList imgs = new ImageList();
imgs.ImageSize = new Size(200, 130);
DirectoryInfo d = new DirectoryInfo(adsFolder);
FileInfo[] Files = {};
try
{
Files = d.GetFiles("*");
for (var i = 0; i < Files.Count(); i++)
{
imgs.Images.Add(Image.FromFile(Files[i].FullName));
imageList.Items.Add(Files[i].Name, i);
}
imageList.SmallImageList = imgs;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
//// Delete function
private void deleteFile_Click(object sender, EventArgs e)
{
using (FileStream stream = new FileStream("Selected Image"), FileMode.Open, FileAccess.Read))
{
stream.Dispose();
}
File.Delete("Selected Image");
}
我发现imagelist
引起了错误,因为该图像已在imagelist中列出。当我移除imagelist
时,它可以正常工作。但是我想保留imagelist
上的listview
。如何停止或清除imagelist
,以使其不再使用所选的图像,从而可以继续删除所选的文件?我尝试使用imagelist.clear()
,但没有用。
答案 0 :(得分:2)
您的问题是这行
imgs.Images.Add(Image.FromFile(Files[i].FullName));
特别是Image.FromFile
会创建一个非托管位图资源,该资源具有打开的文件句柄。
您将需要Dispose
为imageList创建的位图。
如果您有索引,则可以执行以下操作
imageList.Images[index].Dispose();
ImageList.Images.RemoveAt(index);
File.Delete(FileName);