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();
        }