【问题标题】:Image list, removing reference图像列表,删除参考
【发布时间】:2011-09-27 05:04:54
【问题描述】:

目前我正在使用 ImageList 控件,试图从网络上复制文件并覆盖 ImageList 上的内容。但是,当我在填充列表后尝试复制图像时,我无法加载图像。我试过使用 .Dispose() 和 .Images.Clear() 但从我读到的内容中没有删除对 Image 本身的引用,因此可以替换它。

        imageList1.Images.Clear();
        imageList2.Images.Clear();


        int i = 1500;
        string fileName,sourcePath,targetPath,destFile = string.Empty;
        Image img = null;
        int counter = 0;
        bool exists = false;
        string image = string.Empty;
        MiscManager MM = new MiscManager();
        //filePath = MM.GetBobbinImagePath();
        filePath = @"C:\Program Files\Images";
        sourcePath = @"\\network Images";
        targetPath = filePath;

        if (!System.IO.Directory.Exists(targetPath)) 
        {
            System.IO.Directory.CreateDirectory(targetPath);
        }

        if (System.IO.Directory.Exists(sourcePath))
        {
            string[] files = System.IO.Directory.GetFiles(sourcePath);

            foreach (string n in files)
            {
                fileName = System.IO.Path.GetFileName(n);
                destFile = System.IO.Path.Combine(targetPath, fileName);
                try
                {
                    System.IO.File.Copy(n, destFile, true);
                }
                catch
                {
                    MessageBox.Show("File in use",fileName);
                }

            }
        }

        do
        {
            if (i < 10)
            {
                fileName = "000" + Convert.ToString(i);
            }
            else if (i > 10 && i < 100)
            {
                fileName = "00" + Convert.ToString(i);
            }
            else if (i >= 100 && i < 1000)
            {
                fileName = "0" + Convert.ToString(i);
            }
            else
            {
                fileName = Convert.ToString(i);
            }

            image = filePath + fileName + ".bmp";
            exists = File.Exists(image);

            if (exists)
            {
                img = Image.FromFile(image);

                imageList1.Images.Add(img);
                imageList2.Images.Add(img);

                imageList1.Images.SetKeyName(counter, Convert.ToString(i) + ".bmp");
                imageList2.Images.SetKeyName(counter, Convert.ToString(i) + ".bmp");
                counter++;
            }


            i++;
        } while (i < 10000);

我对图像列表了解不多,因此非常感谢任何帮助。在 c# 和 VS 2010 中执行此操作

【问题讨论】:

    标签: c# visual-studio


    【解决方案1】:

    您可以使用MemoryStream,这样您的图像就不会保留对文件流的引用:

    using(MemoryStream ms = new MemoryStream(File.ReadAllBytes(image))
    {
        img = Image.FromStream(ms);
    }
    

    【讨论】:

    • 太棒了,我现在不能尝试,但我会在早上第一件事尝试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多