WPF和事件布线的附加问题

时间:2011-01-25 11:01:26

标签: wpf events garbage-collection attached-properties

我有一个附加属性(例如,它将文本大写在TextBox中)。 Obvoiusly我必须订阅TextBox的TextChanged事件,以便在每次文本更新时将其大写。

public class Capitalize
{
    // this is for enabling/disabling capitalization
    public static readonly DependencyProperty EnabledProperty;
    private static void OnEnabledChanged(
        DependencyObject d, 
        DependencyPropertyChangedEventArgs e)
    {
        var tb = d as TextBox;
        if ((bool)e.NewValue)
        {
            tb.TextChanged += new TextChangedEventHandler(tb_TextChanged);
        }
        else
        {
            tb.TextChanged -= new TextChangedEventHandler(tb_TextChanged);
        }
    }
}

正如我们所见,我们向TextBox添加事件处理程序(如果我理解正确的话)会创建一个强引用。这是否也意味着由于那个强大的参考,GC无法收集TextBox?如果是 - 我应该在哪个时候取消事件以便收集TextBox?

1 个答案:

答案 0 :(得分:1)

引用相反,即文本框保存对事件处理程序的引用。因此不存在内存泄漏的可能性。