我遇到了与中描述的相同的问题这个问题 https://stackoverflow.com/questions/21769908/how-and-when-is-font-disposed-for-winforms-controls。也就是说,Fortify 抱怨字体对象的创建,为此new Font()
语句是在 Designer.cs 文件中生成的代码。当查看分析结果时,我确实觉得我需要对此采取一些措施,至少在某些情况下是这样。
当然,只有当开发人员已将他选择的字体分配给图形设计器中的表单时,这才是一个问题。我的计划是撤消该选择并在调用后手动创建字体InitializeComponent()
然后打电话dispose()
对于字体dispose()
形式的方法。因为这样我自己创建了资源(并检查了它是否在其他地方使用),我确信它不会被共享,并且可以安全地允许它被处置。到目前为止,我对这个问题还是比较有信心的。
Now the dispose()
表单的方法在创建表单时也会生成,并且有一个布尔值disposing
范围。我不确定(这是我的问题)是我是否可以忽略这个参数,或者必须在调用之前检查它的真假font.dispose()
。 (我必须承认我还不理解这些生成的 winform 中的处理逻辑)。
更具体地说:生成的代码如下所示:
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
假设“myForm”表单的字体受到影响,我将使用以下命令创建它
...
InitializeComponent(); // this is generated into the constructor
this.myForm.Font = new System.Drawing.Font("NiftFontName",...);
...
并会打电话this.myForm.Dispose()
处理它。问题是,表格中的什么地方dispose()
方法这应该去。
问题是,它应该放在表单的 dispose() 方法中的哪个位置。
这是微软的一个简单规则:
protected virtual void Dispose(bool disposing)
{
if (disposing) {
// Free any managed objects here.
}
// Free any unmanaged objects here.
}
Read 本文档 http://msdn.microsoft.com/en-us/library/fs2xkftw%28v=vs.110%29.aspx更多细节。
因此,例如,如果您的字体是从字体文件加载的,那么它是非托管的,您应该将其丢弃在if (disposing)
block.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)