【问题标题】:Dispose on user controls, really meant to edit the .designer.cs file?Dispose 在用户控件上,真的是要编辑 .designer.cs 文件吗?
【发布时间】:2009-03-23 11:12:57
【问题描述】:

对于具有必须释放的内部数据结构的用户控件,将代码添加到 .designer.cs 文件中的 Dispose 方法的正确位置,或者是否有一个事件或我们打算使用的东西?

编辑:这是一个 winforms 用户控件。

【问题讨论】:

    标签: c# controls dispose idisposable


    【解决方案1】:

    如果您谈论的是 WinForms,我通常会采用两种方法之一来解决此问题。

    方法 1

    打开 Form.Designer.cs 文件。在生成的 dispose 方法中,我添加了对 DisposeCore 的调用。然后我返回到 Form.cs 并添加一个 DisposeCore 方法,该方法现在将在 dispose 期间调用。我将所有的 dispose 逻辑都添加到这个方法中。

    技术上不支持编辑设计器文件。但是我发现当设计器重新生成代码时,这个特定的编辑不会被冲走。

    方法 2

    将事件处理程序添加到 Form.Disposed 并在处理程序中执行我的处置逻辑。这是更可取的方式,因为它是受支持的操作,并且不会受到您尚未遇到的某些设计器世代的影响。

    【讨论】:

    • 只重新生成 InitializeComponent()。该 Designer.cs 中的其他任何内容都很好。 (至少对于 VS2005)
    • 移动不是更简单吗?
    【解决方案2】:

    您能否澄清一下什么样的控制? ASP.NET、WinForms?

    在 ASP.NET 中,您可以:

    protected override void OnUnload(EventArgs e){
         base.OnUnload(e);
         //Unload here...
    }
    

    【讨论】:

      【解决方案3】:

      或者,您可以将其剪切并粘贴到主 .cs 文件中。该代码不在“#region 组件设计器生成的代码”中,因此 Studio 不会错过它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2013-01-28
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        相关资源
        最近更新 更多