在 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);
}