c# - 处置公共(public)数据集

标签 c# .net winforms dataset idisposable

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

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 访问,并且必须保持可用,直到 Form 关闭。
我的问题是:Visual Studio 2019 版,表示 错误 :

'IDE0069 The DS disposable field is never deleted'.



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

最佳答案

对于大多数组件(不是控件),当您将组件的实例拖放到表单上时,设计器会添加所需的代码进行处理,但对于 DataSet , for 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);
}

关于c# - 处置公共(public)数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529666/

相关文章:

c# - 使用 Writeline 创建批处理文件

c# - Bot 连接器返回 Forbidden (403) 并显示 Microsoft.Bot.Connector.ErrorResponseException

.net - 关于文档格式 Open Xml 的注释是什么?

c# - GCLatencyMode.LowLatency 是一个不错的选择吗?

C# 我有 50 多个 else if 卡片语句,有没有办法让它更短或一次性完成?

c# - 在 C# 中获取访问者 AD 用户名

c# - Office 2010/2013 的 Interop.Word 打印预览对话框

C# 搜索列表框

c# - 如何在 C# web api 中的查询字符串上绑定(bind) guid 列表?

c# - 查找 Microsoft Windows Installer 3.1 或更高版本