gpt4 book ai didi

c# - Image.Dispose() 上的 ArgumentException

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:46 25 4
gpt4 key购买 nike

我正在使用 Windows 窗体制作相册应用程序,但遇到无法解决的问题。首先,我有一个创建 TableLayoutPanel 的表单。之后,我创建了一个方法,在该方法中,我生成的图片框数量与我打开的目录中的图像数量相同。当我试图处理我在图片框中加载的图像时出现问题,因为我需要释放它的内存。这是该方法的代码:

public void createPictureBoxes()
{
Image loadedImage;
int imageCounter = 0;
for (int i = 0; i < rowCounter; i++)
for(int p = 0; p < imagesTable.ColumnCount; p++)
{
PictureBox pb = new PictureBox();
pb.SizeMode = PictureBoxSizeMode.Zoom;
pb.Width = imagesTable.GetColumnWidths()[p];
pb.Height = imagesTable.GetRowHeights()[i];
pb.Click += new EventHandler(enlargeThumbnail);
try
{
loadedImage = Image.FromFile(images[imageCounter++]);
pb.Image = loadedImage;
loadedImage.Dispose();
imagesTable.Controls.Add(pb);
loadedImage.Dispose();
}
catch (IndexOutOfRangeException)
{
break;
}
}
}

程序在表单的方法 Show() 上抛出一个 ArgumentException,告诉我参数无效。如果没有 dispose 方法,一切正常,但如果我尝试加载大量图像,程序将使用 GB 的内存。我想这样处理图像存储器是不对的,但我想不出别的主意。如果有人可以提供帮助,我将不胜感激

最佳答案

两个问题:您要处理两次,而且只要父控件容器需要使用图像控件,您就无法处理它。当表单被处置时,它会导致所有属于其容器一部分的控件被处置。

因此,与其尝试处理两次,不如根本不处理(这里指的是)!

关于c# - Image.Dispose() 上的 ArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16185923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com