在WPF中,这条线是否泄漏?

时间:2009-02-13 11:06:07

标签: wpf memory-leaks

如果我们从可视化和逻辑树中删除TextBox,这行是否会泄漏? 对我来说这是泄漏,因为Mouse.MouseDownmyHandler上有一个引用,并且没有做任何事情来删除处理程序。

<TextBox Mouse.MouseDown="myHandler" />

我不确定,因为这段代码很常见。

1 个答案:

答案 0 :(得分:2)

泄漏了吗? XAML直接转换为以下代码(请参阅obj目录中生成的Window1.g.cs文件)

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

所以,实际发生的是我们在TextBlock中添加了“this”(在我的例子中是Window1的实例)的引用。您在XAML中看到的语法实际上是为路由事件或附加事件附加RoutedEvent处理程序的语法。只是语法使它看起来像你正在分配一些引用。请看一下:Routed Events OverviewAttached Events Overview

编辑:总之,它不泄漏。 :)

Edit2:如果你有任何TextBlock的引用,这将泄漏。但是如果当你关掉TextBlock时,你确保没有更多的元素引用,你会没事的。