在删除项目之前取消订阅?

时间:2021-01-03 09:32:34

标签: c# wpf memory-leaks subscription unsubscribe

ListBox 具有订阅的子项。假设 ListBox 有 StackPanel,StackPanel 有一个 Button 有订阅。

使用 StackPanel 后,我想从 ListBox 中删除 StackPanel。

sum_abundant_factor += j

在从 ListBox 中删除 StackPanel 之前,我应该取消订阅 Button(以避免内存泄漏)吗?或者是否足以从 ListBox 中删除 StackPanel 以便子订阅(在本例中为 Button)消失并且垃圾收集器可以轻松收集它们?谢谢。

1 个答案:

答案 0 :(得分:0)

据我所知

list.Items.Remove(stack);

根本不会修改 StackPanel 的内容。之后您可以继续正常使用 stack 引用的对象。

我可能会先删除控件,然后取消订阅事件。这样,控件将正常运行,直到它被移除的最后一刻。如果您以相反的方式执行它可能没问题,但是用户在删除事件后立即单击按钮的可能性很小,并且显然该按钮不起作用。


还值得一提的是,您根本不必完全取消订阅事件。这可能是一个很好的做法,但也可能只是增加了不必要的复杂性。对于小型应用程序,离开它们可能不会造成任何伤害。最终垃圾收集器将清理所有这些对象,一旦不再使用它们。 (比如说,在 WPF 窗口关闭之后)。

相关问题