gpt4 book ai didi

c# - 我什么时候取消订阅自定义控件中的事件

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:49 24 4
gpt4 key购买 nike

我正在创建包含多个部分的自定义控件。在模板创建中,我正在订阅不同的事件,如下所示:

public override void OnApplyTemplate()
{
base.OnApplyTemplate();

this.partAreaCode = this.GetTemplateChild(PartAreaCode) as TextBox;
this.partExchange = this.GetTemplateChild(PartExchange) as TextBox;
this.partSubscriber = this.GetTemplateChild(PartSubscriber) as TextBox;

if (this.partAreaCode == null || this.partExchange == null || this.partSubscriber == null)
{
throw new NullReferenceException("Template part(s) not available");
}

this.partAreaCode.KeyDown += this.AreaKeyDown;
this.partAreaCode.TextChanged += this.AreaTextChanged;

this.partExchange.KeyDown += this.ExchangeKeyDown;
this.partExchange.TextChanged += this.ExchangeTextChanged;

this.partSubscriber.KeyDown += this.SubscriberKeyDown;

// Template might be applied after dependency property set
// lets refresh UI in this case
this.UIFromValue();
}

所以,我想知道我是否应该取消订阅这些事件,如果是的话——在哪里以及如何取消订阅?

最佳答案

你不必。因为您的 PART 元素是事件订阅者的子元素。如果您的主控件被垃圾回收,那么您的 PART 元素也会被回收。一个简短的例子。假设您有 2 个实例 A 和 B ... A 保持对 B 的硬引用。如果 B 仅通过 A 中的引用保存在内存中并且 A 被垃圾收集,B 也是如此。您不需要清除引用在第一。

如果由于某种原因您不再需要事件,而您的元素和您的 PART 子元素仍然存在,您当然必须取消订阅。

经验法则:如果事件所有者的生命周期比订阅者长,请始终取消订阅事件。

关于c# - 我什么时候取消订阅自定义控件中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com