【问题标题】:Does userControl1.Dispose() take care of all its disposable objects?userControl1.Dispose() 是否处理其所有一次性对象?
【发布时间】:2012-03-24 09:33:16
【问题描述】:

我制作了一个 userControl 库 .. 它包含 NetworkStream、StreamReader、FileStream
那么当具有此 userControl 的表单关闭时,我是否必须将它们全部释放?

我的意思是 userControl 中没有这样的 Form1_FormClosing(object sender,FormClosingEventArgs e) 那么我应该什么时候处理这​​些流?
userControl1.Dispose() 会解决这个问题吗?

提前致谢:)

【问题讨论】:

  • 我假设这是一个 win-forms 问题,如果可以,您可以更新标签吗?

标签: c# dispose user-controls disposable


【解决方案1】:

UserControl.Dispose() 在其Controls 集合中处理组件,但仅此而已。

您可以处理UserControl.Disposed 事件,也可以处理properly implement the Dispose pattern

对于 C# 用户控件,protected override void Dispose(bool disposing) 是在 UserControl1.Designer.cs 中自动创建的。您可以修改为:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (components != null)
        {
            components.Dispose();
        }

        // Dispose your streams here
    }

    base.Dispose(disposing);
}

【讨论】:

    【解决方案2】:

    userControl1.Dispose() 不会神奇地处理它,除非你覆盖它并输入代码来处理你的对象,这是你应该做的。

    查看this answer 以了解如何实现它,将事件取消注册替换为您的调用以处置您的流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多