如何扩展WinForm的Dispose方法?

我从FxCop得到这个警告:

“'RestartForm'包含IDisposabletypes的'RestartForm.done'types:'ManualResetEvent',改变'RestartForm'上的Dispose方法来调用Dispose或Close这个字段。

好吧,我明白这是什么意思,为什么这是需要做的…除了System.Windows.Forms.Form不允许你重写.Close().Dispose() ,那么该怎么办? 目前我正在运行这个解决scheme:

  private void RestartForm_FormClosing(object sender, FormClosingEventArgs e) { done.Set(); done.Close(); } 

其中的作品按照我的应用程序的预期…但FxCop仍然显示此消息。 我是否覆盖了,我可以放心地忽略它,还是有另一种方法,我应该这样做?

您需要重写FormDispose方法

通常这会在RestartForm.Designer.cs文件中自动覆盖,因此您需要将这个configuration文件移动到您的代码文件中,以便您可以添加任何需要添加的代码,而不会被devise人员重写。

在RestartForm.cs中

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

我用这个方法:)

  Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage); currentButton.Image = bgImage; currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose(); 

如果RestartForm扩展了System.Windows.Forms.Form,你应该可以重写Dispose(bool disposing)。 你应该正确地实现这个为你的“RestartForm”类来处置你的IDisposables。

它应该看起来像:

 public override Dispose(bool disposing) { if (disposing) { // Dispose was called from user code. Dispose of managed resources here. done.Dispose(); } // Dispose of unmanaged resources here, and invoke base dispose. base.Dispose(disposing); } 

您需要重写Dispose方法,此方法来自Control基类

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