【问题标题】:About PropertyStore and MDI child form关于 PropertyStore 和 MDI 子窗体
【发布时间】:2010-11-10 05:15:21
【问题描述】:
这是关于 MDI 设置的 .net WinForm 问题。
当主窗体创建一个 MDI 子窗体时,主窗体的PropertyStore 持有对 MDI 子窗体的引用。我想知道这是否会导致子窗体即使关闭也仍然存在。如果是这样,在处理子表单时我应该怎么做才能删除这个引用?
示例代码调用子窗体:
//The code is in the main form.
var f = new FormMDIChild();
f.MdiParent = this;
f.Show();
【问题讨论】:
标签:
.net
winforms
c#-3.0
memory-leaks
【解决方案1】:
作为记录,参考帖子中提供的解决方案确实有效(尽管有点冒险)。但是,如果您打开和关闭另一个子窗体,泄漏也会消失,看起来 MDI Parent 只泄漏最后打开的子窗体。
如果您想使用参考文章中提到的解决方法来修复泄漏,只需覆盖 MDIParent 的 OnMdiChildActivate 方法...
protected override void OnMdiChildActivate(EventArgs e)
{
base.OnMdiChildActivate(e);
typeof(Form).InvokeMember("FormerlyActiveMdiChild",
BindingFlags.Instance | BindingFlags.SetProperty |
BindingFlags.NonPublic, null, this, new object[] { null });
}
【解决方案2】:
我遇到了类似的问题。我发现这个forum post 讨论了这个问题并提出了一个解决方案,但是我不确定这个属性是否已在最近的服务包中被删除,因为我似乎无法使用反射找到该属性,所以该解决方案对我不起作用.如果我找到其他解决方案,我会继续四处寻找并通知您。