所有
我在设计winform时注意到一件事。我在其中一个标签上应用了font属性,并在form.designer.cs InitializeComponent()
.net生成的代码中看到了附加:
this.Lable1.Font=new Font("Arial", 20, .........)
现在,在控件退出Font
后,这个新的InitializeComponent
对象不会被释放。如果我的表单上有20个不同的对象,我将至少有20个不同的未处理的Font对象。
作为补救措施,我尝试在InitializeComponent()
Font font1=new Font("Arial",20,"".......)
Lable1.Font=font1;
font1.dispose();
我错过了什么吗?或者这是.net如何处理字体并可能留下Font对象。
答案 0 :(得分:2)
如果您立即处置资源,您将无法在表格的剩余生命周期内使用该资源。
Font
实例化时Form
被实例化。当您关闭Form
时,Font
实例(以及InitializeComponent()
方法中创建的任何其他内容)将超出范围并被处理掉。
保留Designer.cs
文件中的所有内容。在InitializeComponent()
方法之上甚至还有以下评论:
请勿使用代码编辑器修改此方法的内容。
当您在设计时开始对表单进行其他更改时,您对其所做的任何自定义编辑都可能会被覆盖。它通常不是您需要或想要触摸的文件。
答案 1 :(得分:1)
框架会在处置父对象时自动处理它们(所以Control
或Form
)。
当父控件关闭时,它会自动调用Dispose
方法,它会逐渐消失。
此外,在InitializeComponents
中处理字体是一个坏主意。在类级别创建变量并在Dispose
方法中进行处置。但如上所述,我认为你不需要这个。