在 FormClosed 处处理字段,而不会收到 VS 代码分析警告
Disposing fields at FormClosed, without getting a VS code analysis warning
我认为我的问题的要点是:什么是最佳做法,或者 Visual Studio 2019 给我有关处置物品的错误提示? This post谈论代码分析中的错误,但处理项目仍然有点超出我的知识范围。
我有一个表格,其中声明了一些字段:
public partial class FormRequestLines : Form
{
Process view3dProcess;
Process view2dProcess;
Label label;
......
这些字段用于(重新)启动和终止进程,并以不同的方法写入和隐藏到新创建的标签。
为了处理这些字段,我创建了一个 FormClosed 方法:
private void FormRequestLines_FormClosed(object sender, FormClosedEventArgs e)
{
if (view2dProcess != null) { view2dProcess.Dispose(); }
if (view3dProcess != null) { view3dProcess.Dispose(); }
if (label != null) { label.Dispose(); }
}
1) 应该处理字段是否正确?
2) 这是配置字段的正确方式和位置吗?
Visual studio 给我这些警告:
Ps: 我是用VS的设计器制作窗体的
静态代码分析工具希望您在 Dispose()
方法中进行处理。您需要覆盖 Form 的 Dispose
方法并删除 FormRequestLines_FormClosed
。
见difference between Form.Close and Form.Dispose
通常这会在 FormRequestLines.Designer.cs 文件中自动覆盖,因此您需要将 dispose 移动到您的代码文件中,以便您可以添加任何需要添加的代码,而无需设计人员重写。
protected override void Dispose(bool disposing)
{
if (disposing)
{
components?.Dispose();
view2dProcess?.Dispose();
view3dProcess?.Dispose();
label?.Dispose();
}
base.Dispose(disposing);
}
我认为我的问题的要点是:什么是最佳做法,或者 Visual Studio 2019 给我有关处置物品的错误提示? This post谈论代码分析中的错误,但处理项目仍然有点超出我的知识范围。
我有一个表格,其中声明了一些字段:
public partial class FormRequestLines : Form
{
Process view3dProcess;
Process view2dProcess;
Label label;
......
这些字段用于(重新)启动和终止进程,并以不同的方法写入和隐藏到新创建的标签。
为了处理这些字段,我创建了一个 FormClosed 方法:
private void FormRequestLines_FormClosed(object sender, FormClosedEventArgs e)
{
if (view2dProcess != null) { view2dProcess.Dispose(); }
if (view3dProcess != null) { view3dProcess.Dispose(); }
if (label != null) { label.Dispose(); }
}
1) 应该处理字段是否正确?
2) 这是配置字段的正确方式和位置吗?
Visual studio 给我这些警告:
Ps: 我是用VS的设计器制作窗体的
静态代码分析工具希望您在 Dispose()
方法中进行处理。您需要覆盖 Form 的 Dispose
方法并删除 FormRequestLines_FormClosed
。
见difference between Form.Close and Form.Dispose
通常这会在 FormRequestLines.Designer.cs 文件中自动覆盖,因此您需要将 dispose 移动到您的代码文件中,以便您可以添加任何需要添加的代码,而无需设计人员重写。
protected override void Dispose(bool disposing)
{
if (disposing)
{
components?.Dispose();
view2dProcess?.Dispose();
view3dProcess?.Dispose();
label?.Dispose();
}
base.Dispose(disposing);
}