有時候需要在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方法。