gpt4 book ai didi

c# - 未释放内存/资源

转载 作者:行者123 更新时间:2023-11-30 23:21:54 25 4
gpt4 key购买 nike

我正在使用两个 windows 窗体,第一个窗体将在 datagridview 中填充多个图像文件,在第二个窗体中,所有这些图像都放在另一个 datagridview 中 控件,第二个 datagridview 控件有一个按钮作为 Delete Image,它将删除文件。
在我单击按钮后,在使用文件时发生异常。但我已经处理了 datagridview 并清除了它的行,但它仍然导致无法发布图像。我已经尝试调用 GC.Collect(); 方法,但它没有帮助。我的示例代码如下。

第一种形式:

// Commenting the code above
if (validuser)
{
dgvImages.Rows.Clear();
dgvImages.Dispose();

GC.Collect();
var form = new NewForm();
form.Show();
this.Hide();
}

和第二种形式:

private void dgvImages_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.ColumnIndex == 1)
{
string selectedpath = dgvImages.Rows[e.RowIndex].Cells[2].Value.ToString(); // this cell contains the full path of the image
if (File.Exists(selectedpath))
{
dgvImages.Rows.Clear();
dgvImages.Dispose();

GC.Collect();
GC.WaitForPendingFinalizers();

File.Delete(selectedpath);

LoadImages();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message); // File is in use
}
}

编辑:这是我加载图片的方式

private void LoadImages()
{

if (Directory.Exists(path))
{
DirectoryInfo dir = new DirectoryInfo(path);
FileInfo[] files = dir.GetFiles();

foreach (var f in files)
{
if (f.Extension.ToLower() == ".jpg" || f.Extension.ToLower() == ".png" || f.Extension.ToLower() == ".bmp" || f.Extension.ToLower() == ".tiff")
{
dgvImages.Rows.Add((Image.FromFile(f.FullName)), "Delete Image" ,f.FullName);
}
}
}
}

最佳答案

默认情况下,当您使用 Image.FromFile 时,它​​将锁定文件,直到图像被释放。

根据 MSDN 资源

https://msdn.microsoft.com/en-us/library/4sahykhd(v=vs.110).aspx

您要做的是按照此处的答案加载图像。

Open Image from file, then release lock?


Image img;
using (var bmpTemp = new Bitmap("image_file_path"))
{
img = new Bitmap(bmpTemp, true);
}

根据新的位图文档,您可能需要获取它才能使用 icm。

https://msdn.microsoft.com/en-us/library/3135s427(v=vs.110).aspx

使用此构造函数打开具有以下文件格式的图像:BMP、GIF、EXIF、JPG、PNG 和 TIFF。

关于c# - 未释放内存/资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039496/

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