如果父窗口A(通过构造函数)将对自身的引用传递给子窗口B,以便B可以将其Owner属性设置为A,这是否意味着将不会对子窗口B进行垃圾回收,因为父窗口A会在应用程序?

如果是这样,在WPF窗口之间创建干净的父/子关系的最佳方法是什么?对于这种类型的关系是否存在弱引用的概念?

更新:脑部失败。好吧,我不应该在下午这么晚之前问这个问题。我使问题复杂化了。我的大脑颠倒了GC的逻辑,并认为孩子无法收集,因为它引用了完全错误的其他内容。感谢所有仍在回答的人。

最佳答案

我创建了您提到的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并按下第二个按钮,则析构函数就运行了。希望这能回答这个问题。

09-06 18:02