60

我有一个实现 UserControl 的类。在 .NET 2005 中,会在 MyClass.Designer.cs 部分类文件中自动创建一个 Dispose 方法,如下所示:

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

如果我想添加自己的 Dispose 功能,我应该把它放在哪里?由于生成了此文件,因此我不想在此处添加代码并冒着被吹走的风险。

4

8 回答 8

79

所有Component类都实现一个Disposed事件。您可以为该事件添加事件处理程序并清理其中的内容。

例如,UserControl您可以添加以下方法:

private void OnDispose(object sender, EventArgs e)
{
    // do stuff on dispose
}

并在构造函数(或Load事件处理程序)中添加以下行:

Disposed += OnDispose;
于 2008-12-01T04:03:48.203 回答
55

在这种情况下,我将生成的Dispose方法移动到主文件并扩展它。Visual Studio 尊重这一点。

另一种方法是使用部分方法(C# 3.0)。

于 2008-10-03T16:12:16.960 回答
8

我相信在这种情况下,代码生成器会尊重您的代码。将它放在代码隐藏中应该是安全的。

于 2008-10-03T16:07:59.607 回答
6

在 VS 2005(和 2008)中,您可以更新该Dispose方法,当您从设计器编辑控件时,它不会被删除。

于 2008-10-03T16:08:43.270 回答
2

如果需要,您可以将其从 .designer.cs 文件中移出并移到主 .cs 文件中。如前所述,它不会被覆盖。

于 2008-10-03T16:09:23.427 回答
2

您只需要重载用户控件继承的组件类中的公共 void Dispose() 方法。

确保您将调用传递给基本方法并在功能上进行处理,否则您将破坏功能,除非您完全实现它

于 2009-04-22T10:35:27.240 回答
0

我认为最干净的方法是让您的控件订阅它自己的 Disposed() 事件并在那里进行清理。

于 2017-06-13T05:35:07.570 回答
-2

UserControl 有一个 Unloaded 事件,可用于清理,

于 2012-05-25T14:48:14.910 回答