我有一个位图用户控件,应该在表单关闭时处理。在表单的Closing事件,Closed事件或其他地方执行此操作会更好吗?
第2部分: 在用户控件内部,当它的表单关闭时,是应该在Disposed事件中还是在其他地方处置位图?
答案 0 :(得分:3)
不,表单没有与用户控件的私有成员混淆的业务。通用.NET规则也适用于此,类需要在其自己的Dispose()方法中配置其成员。它将在表单关闭时自动运行,无需任何帮助。
然而,有一个怪癖,UserControl的项目项模板很笨拙。它将Dispose()方法放在控件的Designer.cs文件中。最好的办法是将此方法剪切+粘贴到控件的主源文件中。编辑完方法后,它应该类似于:
/// <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) {
someBitmap.Dispose(); // <== added
someOtherBitmap.Dispose();
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
有些程序员真的不喜欢修改Designer.cs文件,请注意没有什么可担心的,因为代码在标记为Component Designer generated code
的#region之外。另一种方法是使用Disposed事件:
public UserControl1() {
InitializeComponent();
this.Disposed += UserControl1_Disposed;
}
void UserControl1_Disposed(object sender, EventArgs e) {
someBitmap.Dispose();
someOtherBitmap.Dispose();
}