C#,Windows Forms 应用程序。
我们正在重新设计我们的应用程序,并且我还要更改旧版本中使用的糟糕的默认字体。因此,我想在加载窗体时调用以下函数来更改窗体上所有控件的字体。
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()”这一行,那么我就不会收到异常信息了。
这是第三方控件集的一个bug还是预期行为呢?从内存角度来看,不明确处理旧字体是否可行(应用程序在kiosks上每天运行12个小时以上)?
oldFont
?没有。不要处理它。其他东西添加了它并会进行处理。你只需要负责在窗体卸载时处理newFont
即可。 - Sinatr