【发布时间】:2015-03-17 15:44:01
【问题描述】:
C#,Windows 窗体应用程序。
我们正在重新设计我们的应用程序,并且我还更改了我们在旧应用程序中使用的糟糕的默认字体。所以我想我会在加载表单时调用以下函数来更改表单上所有控件的字体。
internal static void SetFonts(Control control)
{
Font oldFont = control.Font;
if (oldFont.Name != GlobalFontName)
{
string familyName = GlobalFontName;
Font newFont = new System.Drawing.Font(familyName,
oldFont.Size, oldFont.Style, GraphicsUnit.Point, 0);
control.Font = newFont;
//oldFont.Dispose();
}
foreach (Control child in control.Controls)
SetFonts(child);
}
我认为如果我在用新字体重新分配控件后处理旧字体会降低资源,但在关闭表单时,我会收到来自一组第三方控件的一种控件类型的访问冲突异常。 如果我注释掉“oldFont.Dispose()”行,那么我不会得到异常。
这是第三方控件集的错误还是可以预料到的?
内存方面,我可以不明确地处理旧字体(该应用每天在信息亭上运行 12 小时以上)吗?
【问题讨论】:
-
如果您的电话无法正常工作,请考虑使用 Reflector 或 ILSpy 之类的反编译器来查看第 3 方代码。看看它的 Font 属性设置器做了什么。
-
好的规则是只处理您添加的内容。你加
oldFont了吗?不,不要丢弃它。其他东西添加了它并将处理它。你只负责处理newFont(当表单被卸载时)。 -
我决定将创建的字体在创建时存储到一个列表中,并在最后处理它们。但我这样做也出错了。