ListBox 具有订阅的子项。假设 ListBox 有 StackPanel,StackPanel 有一个 Button 有订阅。
使用 StackPanel 后,我想从 ListBox 中删除 StackPanel。
sum_abundant_factor += j
在从 ListBox 中删除 StackPanel 之前,我应该取消订阅 Button(以避免内存泄漏)吗?或者是否足以从 ListBox 中删除 StackPanel 以便子订阅(在本例中为 Button)消失并且垃圾收集器可以轻松收集它们?谢谢。
答案 0 :(得分:0)
据我所知
list.Items.Remove(stack);
根本不会修改 StackPanel 的内容。之后您可以继续正常使用 stack
引用的对象。
我可能会先删除控件,然后取消订阅事件。这样,控件将正常运行,直到它被移除的最后一刻。如果您以相反的方式执行它可能没问题,但是用户在删除事件后立即单击按钮的可能性很小,并且显然该按钮不起作用。
还值得一提的是,您根本不必完全取消订阅事件。这可能是一个很好的做法,但也可能只是增加了不必要的复杂性。对于小型应用程序,离开它们可能不会造成任何伤害。最终垃圾收集器将清理所有这些对象,一旦不再使用它们。 (比如说,在 WPF 窗口关闭之后)。