正在处置窗体中的非托管资源
本文关键字:资源 窗体 | 更新日期: 2023-09-27 18:01:10
我正在做R&D和Dispose。我对Forms处理图像资源有疑问。
namespace DisposeTry
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Image mimg = new Bitmap("repository.png"))
image1.Image = mimg;
}
}
}
我不能用mimg。出于显而易见的原因,在"using"中进行处置或封闭。何时以及如何处置此资源。请告知。
是的,您是对的,您需要手动处理Bitmap
对象。
NET位图类";封装GDI+位图";,这意味着您应该在完成位图后调用Dispose
在发布对映像的最后一个引用之前,请始终调用Dispose。否则,在垃圾收集器调用Image对象的Finalize方法之前,它正在使用的资源将不会被释放。
您可以简单地通过重写Dispose
方法来实现这一点
但是,WinForms的问题是,您的窗体是一个分部类,并且有一个部分YourForm.Designer.cs
,它是由Visual Studio自动生成的,并且已经实现了用于处理WinForms组件的Dispose
方法
您需要将此方法移动到您的代码中,请阅读此SO问题中的更多内容。
然后,您的方法将看起来像:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
mimg.Dispose(); // mimg should be global, of course
}
base.Dispose(disposing);
}