gpt4 book ai didi

c# - 当我设置 WPF 子窗口的 Owner 属性时,是否会阻止它被垃圾收集?

转载 作者:行者123 更新时间:2023-11-30 21:12:09 25 4
gpt4 key购买 nike

如果父窗口 A 将对自身的引用传递给子窗口 B(通过构造函数),以便 B 可以将其 Owner 属性设置为 A,这是否意味着子窗口 B 不会被垃圾回收,因为父窗口 A 保持事件状态申请期限?

如果是这种情况,在 WPF 窗口之间创建干净的父/子关系的最佳方法是什么?这种关系有弱引用的概念吗?

更新:大脑失败。好吧,我不应该在下午这么晚的时候问这个问题。我把问题复杂化了。我的大脑颠倒了 GC 的逻辑,认为 child 无法收集,因为它引用了其他完全错误的东西。感谢所有回答的人。

最佳答案

我创建了您提到的 Windows,并添加了一些代码:

// XAML in Window A

<StackPanel>
<Button Click="Button_Click">Show Window</Button>
<Button Click="Button_Click_1">Garbage Collect</Button>
</StackPanel>

// Code in Window A
private void Button_Click(object sender, RoutedEventArgs e)
{
WindowB windowB = new WindowB(this);
windowB.Show();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
GC.Collect();
}

// Code in WindowB
public WindowB(WindowA windowA)
{
this.Owner = windowA;
InitializeComponent();
}

~WindowB()
{
Console.WriteLine("Gone up in a puff of smoke");
}

一旦 B 关闭并按下第二个按钮,析构函数就会运行。希望这能回答问题。

关于c# - 当我设置 WPF 子窗口的 Owner 属性时,是否会阻止它被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668104/

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