【问题标题】:Dispose of public dataset处置公共数据集
【发布时间】:2020-04-19 03:08:24
【问题描述】:

我想在表单代码中声明一个类级别数据集。

public partial class Frm_Stazione : Form
    {
        public Frm_Stazione()
        {
            InitializeComponent();
        }

    private readonly DataSet DS = new DataSet();

    private void Frm_Stazione_Load(object sender, EventArgs e)
    {
     ………
    }
  }

这样声明是因为数据集必须可由不同的 void 访问,并且必须保持可用直到表单关闭。 我的问题是:Visual Studio 2019 版,表示此错误

'IDE0069 DS 一次性字段永远不会被删除'。

我当然是 错误的东西,这可能是我的错误。代码是用 C# 编写的。

【问题讨论】:

标签: c# .net winforms dataset idisposable


【解决方案1】:

对于大多数组件(不是控件),当您将组件的实例拖放到表单上时,设计器会添加所需的代码进行处置,但对于 DataSetfor some reason 它不会添加与处置相关的代码代码。

但是为了安全起见,如果你想处理数据集,你可以遵循框架对所有其他组件使用的相同模式,它定义了一个 components 容器并将所有组件添加到容器中,然后在Dispose 中处理容器。这样,您将在 dispose 方法中拥有更简洁的代码。

为此,如果表单在designer.cs文件中没有与dispose相关的代码,那么您可以轻松地将以下代码添加到form1.cs文件中:

private System.ComponentModel.IContainer components = new System.ComponentModel.Container();
protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}

它将保证所有组件都会被销毁。

如果代码存在于designer.cs 中,则忽略上述步骤。然后在您的构造函数中将数据集添加到components 容器中:

public Form1()
{
    InitializeComponent();
    components.Add(myDataSet);
}

【讨论】:

  • 我知道您已经有一个可以接受的答案,它可以正常工作。不过这个回答也有一定的道理,不要漏了分;)
  • 感谢您的宝贵时间
  • 如果您不小心不接受另一个答案,如果您愿意,请随时将另一个帖子保持为已接受,决定权在您手中 :) JFYI,您只能接受一个已接受的解决方案,但您可以投票为许多您认为有用的解决方案,包括公认的解决方案。接受和点赞可以帮助未来的读者更快地选择更好的解决方案,它们还通过添加声誉来表示对回答者的感谢,点赞+10,接受+15。
【解决方案2】:

好吧,你必须DisposeDS实例,因为它是IDisposable(即分配一些应该通过.Dispose()释放的非托管资源):

  public partial class MyForm : Form {
    ...
    // Unmanaged resources are allocated ...
    private readonly DataSet DS = new DataSet(); 
    ...

    protected override void Dispose(bool disposing) {
      base.Dispose(disposing);

      if (disposing) {
        // ... Unmanaged resources are released
        if (DS != null) { // <- check for null : in order to be on the safe side
          DS.Dispose();
        }
      }
    }
    ...
  } 

【讨论】:

  • 我知道我们必须处理,但我不知道如何处理。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-11-07
  • 2011-02-18
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2013-11-06
  • 2012-10-25
相关资源
最近更新 更多