gpt4 book ai didi

wpf - 为什么带有绑定(bind)的 WPF UserControl 不会收集垃圾?

转载 作者:行者123 更新时间:2023-12-04 20:23:40 26 4
gpt4 key购买 nike

我们的应用程序在其主窗口中添加和删除 WPF (4.0) UserControls,我们注意到它们没有收集垃圾(通过永不返回 null 的 WeakReferences)。似乎如果 UserControl 具有绑定(bind),则会发生这种情况,即使该控件从未添加到树中。 中最简单的复制控制台应用程序 如下:

主程序

class Program
{
[STAThread]
static void Main(string[] args)
{
var obj = GetObj();
var ctl = GetCtl();
for (int x = 0; x < 4; x++)
{
GC.Collect();
Thread.Sleep(1000);
}
bool objAlive = obj.IsAlive;
bool ctlAlive = ctl.IsAlive;
Console.WriteLine(objAlive + "-" + ctlAlive);
Console.ReadLine();
}

private static WeakReference GetObj()
{
return new WeakReference(new object());
}

private static WeakReference GetCtl()
{
return new WeakReference(new MyCtl());
}
}

MyCtl 用户控件(后面的代码是标准的,没有被修改过
<UserControl <!--Snip Default Namespaces-->>
<TextBlock Text="{Binding Blah}" />
</UserControl>

objAlive 为假,但 ctlAlive 为真。如果从 UserControl XAML 中删除 Binding,则两者均为 false。如果我连接了一个内存分析器,MyCtl 仍然存在,但我不知道是什么在引用它(关于如何使用 jetBrains 找到它的提示值得赞赏)。

这是预期的行为还是我需要做更多的工作来清理我的 WPF 用户控件?

最佳答案

取决于你绑定(bind)到什么。

这可能是一个已知问题:http://support.microsoft.com/kb/938416

您是否绑定(bind)到自定义类?您是否实现了 INotifyPropertyChanged 或创建了 DependencyProperty?

关于wpf - 为什么带有绑定(bind)的 WPF UserControl 不会收集垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3517773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com