Вопрос по поводу отсутствия RemoveHandler в функции приложения WPF - PullRequest
0 голосов
/ 24 сентября 2010

У нас есть несколько сценариев в нашем приложении 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

Теперь - мы обсуждаем, вызывает ли использование AddHandler без последующего RemoveHandler (обычно большого нет-нет) проблемы с памятью, учитывая, что объявление AddHandler не указано и используется внутри метода subOpenWindow нет очевидных средств для выполнения вызова RemoveHandler. Мы могли бы переместить объявление viewmodel на более глобальный уровень, но это не кажется таким чистым.

Вопрос в том, необходим ли RemoveHandler в этом сценарии? Или будет ли сборщик мусора очищаться правильно после закрытия окна?

1 Ответ

0 голосов
/ 25 сентября 2010

Вы можете обработать событие Window of Window, чтобы удалить обработчик.Как таковая, ссылка, созданная текущим классом (тот, который содержит обработчик), действительно сохраняет myViewModel в памяти.Альтернативой может быть использование слабых событий - подробности см. здесь .

...