gpt4 book ai didi

.net - 事件处理程序的垃圾收集

转载 作者:行者123 更新时间:2023-12-01 13:07:13 24 4
gpt4 key购买 nike

我有一个 Windows.Forms 应用程序,其中包含一个填充了帐户对象的列表框。当用户从列表中选择一个帐户时,我会附加一个事件处理程序,负责在用户查看时有任何新帐户交易的情况下更新所选帐户交易。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var selected = listBox1.SelectedItem as Account;
if (selected != null)
{
UpdateTransactions(selected);
selected.OnNewTransaction += (s, a) => UpdateTransactions(selected);
}
}

那么我的问题如下;一旦用户从列表中选择另一个帐户并且所选帐户超出范围,此事件处理程序是否会自动处理?或者它会继续徘徊,然后如果用户再次选择相同的帐户,则会分配另一个处理程序,从而造成内存泄漏?

最佳答案

它仍然存在,因此每次用户再次选择同一个帐户时,它都会被再次分配。

为了再次分离事件,您应该调整附加事件的方式,以保留对它的引用:

EventHandlerType handler = (s, a) => UpdateTransactions(selected);
selected.OnNewTransaction += handler;

// When you want to remove the handler do this (make sure you "store" handler somewhere)
selected.OnNewTransaction -= handler;

关于.net - 事件处理程序的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192156/

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