我创建了一个如下所示的自定义控件。
public partial class TextBoxEx : TextBox
{
public TextBoxEx()
{
InitializeComponent();
Font = Utility.normalFont;
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
//A utility class to initialize font.
class Utility
{
internal static Font normalFont = new Font("Arial", 18);
}
我有两个表格 Form1 和 Form2。此 TextBoxEx 被添加到 Form2。单击 Form1 中的按钮时,我正在显示 Form2。
连续显示和关闭 Form2 会导致我的应用程序中的 GDI 泄漏。用GDI检测工具(Bear.exe)分析,发现是Font导致GDI泄漏。
我的问题是,
- 为什么调用 TextBoxEx 的 Dispose() 方法却不释放字体。(关闭 Form2 时,会自动调用 TextBoxEx 的 Dispose() 方法)。
- 如何解决由字体引起的 GDI 泄漏?(Font.Dispose() 不能在 TextBoxEx 的 Dispose() 方法中调用。因为它在构造函数中抛出“参数无效”异常)。