【发布时间】:2017-03-14 16:41:57
【问题描述】:
请考虑一下这个简单的功能:
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...
【问题讨论】:
-
已经完成了它的任务,Framework会自动清除资源---也许不会,clr也会检查它的引用
-
这取决于您的网格是否保留对淡入淡出的引用。如果是,则无法清除。
-
您将
fade传递给BeginAnimation,所以一般来说您现在不知道它何时会被垃圾收集,因为BeginAnimation(理论上)可能会将其存储在静态字段中或以其他方式保留参考它。至于已完成的事件——它会发生什么?每次调用BeginFade时,fade都是新的,Completed事件也是如此。
标签: c#