1

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

4

0 に答える 0