【问题标题】:Implement Dispose(bool) on a UserControl在 UserControl 上实现 Dispose(bool)
【发布时间】:2010-01-06 16:04:17
【问题描述】:
当 VS 设计器已经使用 DebuggerNonUserCode 属性实现 Dispose(boolean) 时,如何在 UserControl 上实现 Dispose(boolean)?我对这个方法的修改会被删除吗?
(来自 UserControl.Designer.vb 的代码)
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
【问题讨论】:
标签:
.net
user-controls
dispose
visual-studio-designer
【解决方案1】:
您需要从设计器文件中删除Dispose 方法并将其添加到您的源文件中。
您可能还应该删除 DebuggerNonUserCode 属性。
至少在 C# 中,设计器不会自动将Dispose 放回设计器文件中,如果 VB 设计器这样做,我会感到震惊。
【解决方案2】:
如果您在 .Designer.vb 文件中对该方法进行修改,它们将不会被覆盖。 DebuggerNonUserCode 属性仅表示如果您正在调试该代码,则不允许您单步执行。它总会越过。
【解决方案3】:
一种解决方案是将您正在使用的任何一次性类型封装在派生自System.ComponentModel.Component 或实现System.ComponentModel.IComponent 的类中。
然后您可以将它们添加到由设计器生成的代码实例化的 IContainer 中,它们将与其他组件一起被释放。
例如
class MyDisposableComponent : IComponent
{
... implementation
}
class MyUserControl : UserControl
{
MyDisposableComponent myDisposableComponent;
...
void SomeMethod()
{
myDisposableComponent = new MyDisposableComponent();
components.Add(myDisposableComponent);
// myDisposableComponent will be disposed automatically when the
// IContainer components is disposed by the designer-generated
// Dispose implementation.
}
...
}