如何扩展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仍然显示此消息。 我是否覆盖了,我可以放心地忽略它,还是有另一种方法,我应该这样做?
您需要重写Form
的Dispose
方法
通常这会在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); }