在我们的 WPF/MVVM 应用程序中有一些场景,其中一个窗口被实例化并在方法的范围内打开。非常简单的例子:
Private Sub subOpenWindow
Dim myViewModel = New Viewmodel1 'create viewmodel that Window1 will use as datacontext
AddHandler myViewModel.SomeEvent, AddressOf subHandleSomeEvent
Dim myWindow = New Window1(ViewModel1)
myWindow.Show
End Sub
Private Sub subHandleSomeEvent
'do some stuff
End Sub
现在 - 我们正在讨论在没有后续 RemoveHandler 的情况下使用 AddHandler(通常是一个很大的禁忌)是否会导致我们的内存问题,因为 AddHandler 声明已被贴花并在 subOpenWindow 方法内部使用并且没有明显的方法执行 RemoveHandler 调用。我们可以将 viewmodel 声明移到更全局的级别,但这似乎并不干净。
问题是:在这种情况下是否需要 RemoveHandler ?或者一旦窗口关闭,垃圾收集会正确清理吗?