本文介绍了呼唤字体的Dispose()的Windows窗体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经运行到同一问题作为的。也就是说,Fortify的抱怨创建字体对象,为此,新字体()语句在designer.cs文件中生成的代码。当分析结果看我得到我需要为此做些什么,至少在某些情况下,impreesion。



这是当然的,问题仅在develper已指派他的选择字体的形式在图形设计师。我的计划是要撤消选择和调用的InitializeComponent()后手动创建字体,然后调用的Dispose()的字体在出售形式()方法。既然这样,我做的创建自己的资源(并检查其是否在其他地方使用)我敢肯定它是不是共享的,可安全地允许它的处置。到这一点,我相当有信心的问题。



形式现在的Dispose()方法创建并有一个布尔处理参数的形式时,产生为好。什么我不确定(这是我的问题)是我能不能忽略此参数,或在调用之前,检查其是否真的还是假的 font.dispose() 。 (我不得不承认我还不了解这些生成的WinForms的Dispose逻辑)



更具体地说:生成的代码如下:

  ///<总结>使用
///清理的任何资源。
///< /总结>
///< PARAM NAME =处理>真要是托管资源应释放;否则为false< /参数>
保护覆盖无效的Dispose(BOOL处置)
{
如果(处置和放大器;及(成分= NULL)!)
{
components.Dispose();
}
base.Dispose(处置);
}



假设为形式的'myForm会'的字体受到影响,我想创建它使用

  ... 
的InitializeComponent(); //这是生成到构造函数中
this.myForm.Font =新System.Drawing.Font(NiftFontName,...);
...

和会叫 this.myForm.Dispose ()处置它。现在的问题是,凡在形式的的Dispose()方法本应该去。


解决方案

Here is a simple rule from Microsoft:

protected virtual void Dispose(bool disposing)
{
   if (disposing) {
      // Free any managed objects here. 
   }

   // Free any unmanaged objects here. 
}

Read this documentation for more details.

So if your font is loaded from a font file, for instance, then it is unmanaged and you should dispose it outside the if (disposing) block.

这篇关于呼唤字体的Dispose()的Windows窗体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 10:04