2009-02-13 2 views
1

Произошла ли эта линия, если мы удалим TextBox из визуального и логического дерева? Мне это утечка, потому что Mouse.MouseDown имеет ссылку на myHandler, и ничего не сделано, чтобы удалить обработчик.В WPF происходит ли утечка этой линии?

<TextBox Mouse.MouseDown="myHandler" /> 

Я не уверен, потому что этот код является обычной практикой.

+0

Вы всегда можете попробовать получить профилировщик памяти (например, ANTS от Redgate) и протестировать небольшой проект с этой подпиской на события. Вы должны уметь видеть, выпущен ли TextBox. –

ответ

2

Протекает ли он? Это XAML переводится непосредственно в следующий код (см файл Window1.g.cs сгенерированный в каталоге OBJ)

((System.Windows.Controls.TextBlock)(target)).AddHandler(System.Windows.Input.Mouse.MouseDownEvent, new System.Windows.Input.MouseButtonEventHandler(this.TextBlock_MouseDown)); 

Итак, что на самом деле происходит то, что мы добавляем ссылки на «это» (в моем случае экземпляр Window1) в TextBlock. Синтаксис, который вы видите в XAML, на самом деле является синтаксисом присоединения обработчика RoutedEvent для маршрутизированных событий или связанных событий. Просто бывает, что синтаксис делает его похожим на то, что вы назначаете некоторую ссылку. Взгляните на это: Routed Events Overview и Attached Events Overview.

Редактировать: В заключение он не течет. :)

Edit2: Если у вас есть ссылка на TextBlock, это будет протекать. Но если при отключении TextBlock вы убедитесь, что ссылок на элемент больше нет, все будет в порядке.

+0

Итак, это означает, что утечки нет. Спасибо за Ваш ответ ! –

+0

Если ссылка на TextBlock сохраняется в другом месте в коде, это приведет к утечке. Обратите внимание, что Маршрутизированные события не являются слабыми событиями. – ligaz

+0

Да, но поскольку его нет, эта конкретная строка кода не будет протекать. :) Я отредактирую, чтобы отразить эту деталь. –

 Смежные вопросы

  • Нет связанных вопросов^_^