c# - 异常 : Parameter is not valid (on passing new image to pictureBox)

标签 c# image dispose

我在 PictureBox 控件中已经有一个图像,现在我想向它传递一个新图像。

发生了什么,allpication Disposes(我发现了一个异常:“参数无效”)。

这是我的代码:

            using (Image img = Image.FromFile(open.FileName))
            {
                part.Picture = img;
                pictureBox1.InitialImage = null;
                pictureBox1.Image = img;
            }    

因此,当代码离开方法时,它会直接处理此表单和主表单。我仅在启动 Form1 的行上捕获异常。在这一点上,没有任何异常(exception)。 pictureBox 正在绘制时(在 Paint 事件中)一定是出了什么问题,但我对此并不满意。

我真的不知道如何解决这个问题。我什至尝试使用清除所有资源(通过调用垃圾收集),但似乎没有任何效果。


还有一件事:“部分”是列表的引用,所以当我尝试删除当前图像(用新图像替换它)时,我遇到了另一个异常,例如:

“该进程无法访问该文件,因为它正被另一个进程使用”。


这是否与第一个异常有关(当新图像未在 pictureBox 中绘制时)?

最佳答案

正如 Reed 所指出的,一旦您退出 using() 语句,您从 open.Filename 中提取的图像就会被处理掉。您的图片框仍在内存中引用此图像,因此当它被处置时,您也会丢失存储在图片框中的内容。

您真正需要的是您正在拉取的图像的唯一副本。

    using (Image sourceImg = Image.FromFile(open.Filename))
    {
        Image clonedImg = new Bitmap(sourceImg.Width, sourceImg.Height, PixelFormat.Format32bppArgb);
        using (var copy = Graphics.FromImage(clonedImg))
        {
            copy.DrawImage(sourceImg, 0, 0);
        }
        pictureBox1.InitialImage = null;
        pictureBox1.Image = clonedImg;
    }

这样,您的文件将在您退出此 block 后立即解锁,并且您将在图片框中保留图像的唯一副本。

关于c# - 异常 : Parameter is not valid (on passing new image to pictureBox),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680618/

相关文章:

image - 为什么不能在 docker swarm 集群中自动从 aws 上的 ecr 拉取图像?

css - 如何在悬停时显示另一张图片?

javascript - Jquery 确定有效 DPI 来缩放 Canvas 中的图像

entity-framework-4.1 - 实体和存储库模式与 ninject、Dispose Issue

c# - 如何在 C# 中编写 Windows 7 小工具?

c# - 编码\解码字符串问题 JS <-> C#

c# - 无法识别文本文件中的字符(如 € ² µ)

c# - 在我的终结器中处理我的 System.IDisposable 对象

c# - 尝试/最终阻止与调用处置?

c# - Gravatar:我怎么知道用户是否有真实图片