gpt4 book ai didi

c# - 如果要调用的方法被垃圾回收,Dispatcher.Invoke 会发生什么?

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

我有这样的代码:

var myTimer = new Timer(500);
myTimer.Elapsed += (o, a) =>
{
Application.Current.Dispatcher.Invoke(() =>
{
// Handle elapsed
}, DispatcherPriority.Render);
};

如果计时器超时并将匿名方法添加到 Dispatcher,然后立即超出范围并在调度程序调用匿名方法之前进行垃圾收集,会发生什么?

最佳答案

它的生命周期不会特别结束因为消息循环正在引用它。

即使该对象不再在代码范围内,该对象仍可通过根对象访问,因此 GC 无法收集它。

使用托管内存的全部意义在于,您可以依靠 GC 仅在无法从可执行代码访问它们时才回收任何托管资源。如果可执行代码可以访问对象,则不会收集该对象。

关于c# - 如果要调用的方法被垃圾回收,Dispatcher.Invoke 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220954/

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