Joh*_*ohn 2 user-controls dispose design-patterns .net-2.0
我们遇到了IDisposable模式的一些问题.在这种情况下,有一个用户控件'ControlA'带有FlowLayoutPanel,它包含更多用户控件'ControlB'.
当调用Dispose(bool)时,我检查是否处置为true,如果IsDisposed为false.然后我尝试在FlowLayoutPanel的Controls集合中显式地处理每个ControlB.但是,如果不循环遍历所有控件,则只有8个中的3个或4个中的2个.
Dispose(bool disposing)
{
if (disposing)
{
if (!IsDisposed)
{
//unhook events etc.
foreach(ControlB ctrl in flowlayoutpanel.Controls) //<-- there 8 controls
ctrl.Dispose(); //<-- called 3 times only
flp.Controls.Clear();
}
}
//make all members null
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:1.为什么会这样?2.你们处理用户控件和儿童控件的最佳做法和经验是什么?例如,您是否始终取消订阅事件处理程序等.
谢谢!
您不需要手动处理作为正在处理的控件的子控件的控件,即在Controls集合中.父控件将自动处理此问题.
如果您被处置,您必须取消订阅范围之外的事件,即那些将保持活着的对象的成员,因为它们将使您保持活着,尽管被处置.您不需要取消订阅正在处理的对象中的事件,例如您的子控件.
| 归档时间: |
|
| 查看次数: |
9522 次 |
| 最近记录: |