Я работаю с программой Winforms, которая была написана некоторое время назад. Я сталкивался с некоторыми проблемами с этим, и я пытаюсь оптимизировать способ обработки некоторых вещей, но я сталкиваюсь с некоторыми проблемами с удалением.Устранение изображения при использовании PictureBox
Ниже приводится то, что в настоящее время реализуется.
Первый, Он начинается с просмотра файлов в папке «Изображения» и копирования их в папку предварительного просмотра.
foreach (string s in files)
{
fileName = System.IO.Path.GetFileName(s);
destFile = System.IO.Path.Combine(path, fileName);
File.Copy(s, destFile, true);
}
Следующая, она открывает форму через ShowDialog:
frmPreview frm = new frmPreview(FileNameArray, lblParcel.Text);
frm.ShowDialog();
Следующая, он идет в Preview форме и получает этот код:
try {
FlowLayoutPanel imagePanel = new FlowLayoutPanel();
if (System.IO.Directory.Exists(path))
{
folder = new DirectoryInfo(path);
foreach (FileInfo files in folder.GetFiles())
{
System.Diagnostics.Debug.Print(files.Extension);
if ((string.Equals(files.Extension, ".jpg", StringComparison.OrdinalIgnoreCase)) || (string.Equals(files.Extension, ".gif", StringComparison.OrdinalIgnoreCase)) || (string.Equals(files.Extension, ".png", StringComparison.OrdinalIgnoreCase)))
{
PictureBox image = new PictureBox();
image.Image = Image.FromFile(files.FullName);
image.SizeMode = PictureBoxSizeMode.Zoom;
image.Size = this.Size;
imagePanel.Controls.Add(image);
}
}
}
this.Controls.Add(imagePanel);
System.Threading.Thread.Sleep(0);
return;
}
catch
{
}
Кодекса выше в основном принимает все фотографии, создает PictureBox с каждым из них и добавляет PictureBox в FlowLayoutPanel для отображения в wi ndow для предварительного просмотра. Проблема заключается в том, что он не утилизируется должным образом и попадает после попытки посетить это окно предварительного просмотра в третий раз (закрытие окна и открытие его во второй раз отлично работает, но создает второй процесс).
Last, он реализует следующее, когда форма закрывается.
private void frmPreview_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
this.Close();
}
ошибка происходит на 3-й раз в окне предварительного просмотра вызывается, когда программа проходит через foreach
заявлении, размещенном в верхней части.
Полная линия, где она ловит является:
File.Copy(s, destFile, true);
Процесс не может получить доступ к файлу 'C: \ Users \ имя пользователь \ Pictures \ Просмотр \ image.jpg', так как он используется другим обработать.
я 99,9% уверен, что это из-за PictureBox
и FlowLayoutPanel
, но я не могу понять, что нужно сделать, чтобы это исправить. Я хотел бы изменить как можно меньше, так как это не моя программа, и она скоро будет полностью переписана. Мне в основном просто нужно временно исправить проблему, пока мы не закончим большую картину, где вся эта программа будет утилизирована.
Я нашел пару сообщений, которые, похоже, похожи на проблемы, но ни одно из исправлений ничего не изменило. Ниже приведены все посты я посмотрел в и пытается реализации неудачно:
file-copy-the-process-cannot-access-the-file
file-is-being-used-by-another-process
использовать 'Image.FromStream' [этот путь] (HTTP: // stackoverflow.com/a/38830222/3110834). –
С первого взгляда, похоже, это может быть то, что я искал. Я попробую. – Hank
Также вам не нужно удалять форму после того, как вы ее закрыли. Если это диалоговая форма, используйте ее в используемом блоке, иначе вам не нужно использовать this.Dispose вообще. Вы можете взглянуть на этот пост [Мне нужно удалить форму после того, как форма закрыта?] (Http://stackoverflow.com/a/39501121/3110834) –