次のコードを使用して を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# に非常に慣れていないので、今のところ機能していることをうれしく思います。