我正在使用Dispose进行R& D。如果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.Dispose或封装在'中使用'原因很明显。何时以及如何处置此资源。请指教。
答案 0 :(得分:4)
是的,你是对的,你需要手动处理Bitmap
对象。
.NET Bitmap类“封装了一个GDI +位图”,这意味着你应该在完成它时调用Bitmap上的Dispose,
在释放对图像的最后一个引用之前,请始终调用Dispose。否则,在垃圾收集器调用Image对象的Finalize方法之前,不会释放它正在使用的资源。
您可以通过覆盖Dispose
方法来执行此操作
但是,WinForms的问题在于您的表单是一个部分类,并且有一个部分YourForm.Designer.cs
,它由Visual Studio自动生成,并且已经实现了Dispose
方法来处理WinForms组件。
您需要将此方法移至代码中,请在this SO question中阅读更多内容。
然后,您的方法将如下所示:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
mimg.Dispose(); // mimg should be global, of course
}
base.Dispose(disposing);
}