有时候需要在Windows Forms中加入一些实现了IDisposable接口的类型,然而会有这样的疑惑:应该在何时调用这些类型的Dispose方法? 第一种方式是在窗体的OnClosed事件处理函数重载中调用,比如:
class MyComponent : IDisposable { } class Form1 : Form { private readonly MyComponent _component = new(); public Form1() { InitializeComponent(); } protected override void OnClosed(EventArgs e) { _component.Dispose(); base.OnClosed(e); } }另一种更为优雅的做法是,在窗体的构造函数中,初始化Container对象,然后把实现了IDisposable接口的类的实例,添加到Container中:
class Form1 : Form { private readonly MyComponent _component = new(); public Form1() { InitializeComponent(); components = new Container(); components.Add(_component); } }在Windows Forms中,Form的代码实现为部分类(partial class),在窗体设计器自动生成的代码中,已经定义了components对象:
private System.ComponentModel.IContainer components = null;而在Form的Dispose方法中,会调用components的Dispose方法:
protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); }所以,只需确保components对象已经被初始化,然后把需要Dispose的对象放在components里就可以了,Form在被Dispose的时候,就会自动调用我们的Dispose方法。