我有一个使用以下代码ListView
显示的:ImageList
注意:我使用 XML 将单个图像放入 ImageList。
for (int i = 0; i < pictureList.Count; i++)
{
Image temp = Image.FromFile(pictureList[i].InnerXml.ToString());
Image img = temp.GetThumbnailImage(120, 120, null, new IntPtr());
imageList.Images.Add(img);
}
当我去删除一个项目时,我使用以下代码:
node.ParentNode.RemoveChild(node);// This deletes said node from the XML
doc.Save(xmlpath); // This then saves the updated XML document
imageList1.Images.Clear(); //Clear ImageList1
refreshThumbnails(); //Function that Regenerates thumbnails (without deleted image)
File.Delete(picturePath); //Deletes the image
上述代码仅在图像未在另一个 XML 中共享时执行。
我尝试添加一个计时器,ListView
直接从中删除特定项目并清除ImageList
. 它们都间歇性地给出一个通用的 IO 错误,说明文件被锁定。
唯一一致的是,如果它是相册中的最后一张图片,它总是会抛出相同的 I/O 错误。
我的主要问题是如何避免这个错误?我可以删除大约 75% 的时间,另外 25% 的时间给我一个“文件锁定”错误。
==============================================
我想我找到了答案。
加载图像时:
imageList.Images.Add(img);
我忘了处理图像后记。由于我刷新缩略图以反映最新的 XML 状态,因此它锁定了它加载的最后一个图像。因此,每当我删除最后一张图像(也就是列表中唯一的图像)时,我都会尝试删除锁定的文件。
这看起来对吗?我对 C# 很陌生,我很高兴它现在可以工作。