C# 4.0 无法使用C从目录中删除映像
我正试图使用以下语句从目录中删除一个图像C# 4.0 无法使用C从目录中删除映像,c#-4.0,c#-3.0,C# 4.0,C# 3.0,我正试图使用以下语句从目录中删除一个图像 System.IO.File.Delete(Path); 我以前在另一个函数中访问过此图像 Image image=Image.FromFile(imagePath) imageList1.Images.Add(image); 但它显示了一个错误,文件被另一个进程锁定。我搜索了这个,发现我应该使用来处理图像对象,所以我尝试了这个 using(Image image=Image.FromFile(imagePath)) imageList1.I
System.IO.File.Delete(Path);
我以前在另一个函数中访问过此图像
Image image=Image.FromFile(imagePath)
imageList1.Images.Add(image);
但它显示了一个错误,文件被另一个进程锁定。我搜索了这个,发现我应该使用来处理图像对象,所以我尝试了这个
using(Image image=Image.FromFile(imagePath))
imageList1.Images.Add(image);
但这在program.cs中给了我一个错误,即参数无效,程序无法运行。
有时会出现错误
在单个线程上启动第二个消息循环不是有效的操作。改用Form.ShowDialog
我将imagelist添加到列表视图中,在删除文件之前,我将使用以下命令清除imagelist和listview中的所有项
imageList1.Images.RemoveByKey(imageName);
imageList1.Images.Clear();
listView1.Items.RemoveByKey(imageName);
listView1.Items.Clear();
listView1.SmallImageList = null;
这是我填充listview的代码
try
{
string album = albumListBox.SelectedItem.ToString();
List<string> imageName=new List<string>();
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "/image.xml");
XmlNodeList list = null;
list = doc.SelectNodes(string.Format("/images/image"));
listView1.Columns.Clear();
listView1.Columns.Add("Image List",210,HorizontalAlignment.Left);
listView1.SmallImageList = imageList1;
listView1.Items.Clear();
imageList1.Images.Clear();
listView1.MultiSelect = false;
foreach (XmlNode node in list)
{
if (node.ChildNodes[2].InnerText == album)
{
string imagePath = Application.StartupPath + "\\images\\" + album + "\\" + node.ChildNodes[0].InnerText;
Image image = Image.FromFile(imagePath);
imageList1.Images.Add(image);
imageName.Add(node.ChildNodes[0].InnerText);
}
}
for (int j = 0; j < this.imageList1.Images.Count; j++)
{
listView1.Items.Add(imageName[j],imageName[j],j);
listView1.View = View.Details;
}
}
catch (Exception e)
{
MessageBox.Show("No Images in this Album Please add the Images");
showImage.Hide();
}
只要图像仍然在imagelist1中被引用,它就不会被释放。为了正确地处理它,您还必须处理imagelist1。然后,仅关闭对图像的所有引用 我还没有看到完整的代码,但由于GC的非确定性行为,.net对象有时仍然是活动的。我有一个建议,虽然我自己没有尝试过,但在删除文件之前尝试手动处理图像对象。请查看更新的qstn我尝试过处理对象,但没有luckI尝试手动处理图像对象,但它在program.csd中给出了相同的eror。这一行有错误吗?imageList1.Images.Addimage;否,如果我在此行应用程序中处理program.cs中出错的图像对象。运行新的ImageCollector;
var listItem = listView1.SelectedItems[0];
string album = albumListBox.SelectedItem.ToString();
string imageName = listItem.Text;
string imagePath = Application.StartupPath + "\\images\\" + album + "\\" + imageName;
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "/image.xml");
XmlNode node = doc.SelectSingleNode(string.Format("//image[./imageName/text()='" + imageName + "' and ./album/text()='" + album + "']"));
if (node != null)
{
//remove image from directory tooV
doc.DocumentElement.RemoveChild(node);
doc.Save(Application.StartupPath + "/image.xml");
imageList1.Images.RemoveByKey(imageName);
imageList1.Images.Clear();
listView1.Items.RemoveByKey(imageName);
listView1.Items.Clear();
listView1.Items[listView1.SelectedIndices[0]].Remove();
imageList1.Images.RemoveAt(listView1.SelectedIndices[0]);
listView1.SmallImageList = null;
fillImageList();
System.IO.File.Delete(imagePath);
MessageBox.Show("Image deleted");
fillAlbumList();
}