if (Image.FromFile(imageFile) != null)
{
Image.FromFile(imageFile).Dispose();
}
Bad. Вы загружаете изображение из файла, проверяете, является ли результат нулевым ... затем загружаете его снова в новый результат, чтобы вы могли утилизировать его. Хотя последняя часть глупа, это не вредно. Первая часть, однако, так как результирующее Image
никогда не удаляется должным образом (если / когда GC собирает его, финализатор типа Image
должен утилизировать неуправляемые ресурсы, но на это не стоит полагаться)
Кстати, Image.FromFile
никогда не вернется null
. Если он не может прочитать изображение, он выдаст OutOfMemoryException
.
Код также, похоже, ничего не делает, поскольку в нем нет блока else
и в блоке if
ничего не делается.
Я предполагаю, что ваш OutOfMemoryException
исходит из того факта, что один или несколько файлов в этом каталоге хранятся в поврежденном или неподдерживаемом формате изображения или не являются изображением вообще .
Попробуйте заменить код в foreach
следующим:
try
{
Image image = Image.FromFile(imageFile);
PictureBox eachPictureBox = new PictureBox();
eachPictureBox.Size = new Size(100,100);
eachPictureBox.Location = new Point(iCtr * 100 + 1, 1);
eachPictureBox.Image = Image.FromFile(imageFile);
iCtr++;
panel1.Controls.Add(eachPictureBox);
}
catch(OutOfMemoryException) { } // skip the file