我的应用程序有两种不同的形式;
在表单1(应用程序的主表单)中,第二行的表单如下所示;
FormMain:
...
if (sth_goes_wrong) {
this.formWarn = new FormWarn("explanatory message...");
this.formWarn.Dispose(); // <- this is the line in question
}
...
FormWarn:
internal class FormWarn : Form {
...
public FormWarn(String msg) {
this.SetupStuff();
this.btnOk.Click += FormWarn_BtnOkClick;
...
this.ShowDialog();
}
private FormWarn_BtnOkClick(Object sender, EventArgs e) {
...
this.Close();
}
...
}
警告形式显示为“对话框”,并且用户在阅读消息后,应该按下按钮(btnOk),该按钮将程序流发送到使用Close()
方法的一行。
我的问题是; (在Close()
类中的FormWarn
方法是否负责释放资源,还是返回主表单后我需要使用Dispose()
方法?
答案 0 :(得分:0)
一般规则是任何要实施IDisposable
的东西。这包括表格,因为基数Form
是IDisposable
。此外,即使在例外情况下,也应采取措施确保处置。因此,更好的模式通常如下所示:
if (sth_goes_wrong) {
using (var formWarn = new FormWarn("explanatory message..."));
{
formWarn.ShowDialog();
}
}
请注意,我没有使用成员变量,而是通过阻止对话框显示了表单。
或者,您可以继续使用成员变量。但是,在那种情况下,您需要重写当前表单的Dispose()
方法以处置您的formWarn
实例(如果存在),并且所讨论的代码应如下所示:
if (sth_goes_wrong) {
this.formWarn = this.formWarn ?? new FormWarn();
formWarn.Message = "explanatory message...";
formWarn.Show();
}
还添加了新的Message
属性,使您可以更新现有实例。