关于变量范围和事件处理程序的澄清

时间:2017-03-14 08:00:16

标签: c#

请考虑这个简单的功能:

public void BeginFade() 
{
    var fade = new DoubleAnimation(0d, TimeSpan.FromSeconds(1));
    fade.Completed += Fade_Completed;
    grid.BeginAnimation(OpacityProperty, fade);
}

var fade的范围是函数BeginFade,据我所知,当DoubleAnimation类完成其任务时,框架将自动清除资源。

这是对的吗?

那么事件处理程序呢?当我多次拨打BeginFade()时,事件Completed会发生什么?

这个例子只是为了更好地理解潜在的行为。当然,我可以将fade声明为类成员,并在构造函数中设置事件Completed ...

1 个答案:

答案 0 :(得分:2)

因此,fade已传递给BeginAnimation,这意味着您无法知道何时将其处理掉。但我认为在这种情况下,你的猜测是正确的。

每次调用BeginFade,您都会创建新的fade对象,然后Fade_Completed事件处理程序会订阅其Completed事件。因此,您的fade动画中的每一个都只有一个Fade_Completed订阅。这不会阻止fade对象被垃圾收集,如果这是你要求的。