1

添付プロパティがあります(たとえば、TextBox内のテキストを大文字にします)。明らかに、テキストが更新されるたびに大文字にするために、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を収集できるように、どの時点でイベントの配線を解除する必要がありますか?

4

1 に答える 1

1

参照は逆になります。つまり、テキストボックスはイベントハンドラーへの参照を保持します。したがって、メモリリークの可能性はありません。

于 2011-01-25T11:26:29.917 に答える