我有这样的代码:
var myTimer = new Timer(500);
myTimer.Elapsed += (o, a) =>
{
Application.Current.Dispatcher.Invoke(() =>
{
// Handle elapsed
}, DispatcherPriority.Render);
};
如果计时器过去并将匿名方法添加到Dispatcher,那么在调度程序调用匿名方法之前,会立即超出范围并进行垃圾收集,会发生什么?
答案 0 :(得分:4)
它的生命周期不会特意结束,因为消息循环正在引用它。
即使对象不再在代码范围内,该对象也可以通过rooted对象访问,因此GC无法收集它。
使用托管内存的关键在于,当无法从可执行代码访问它们时,您可以依赖GC只回收任何托管资源。如果可执行代码可以访问对象,则不会收集该对象。