WPF Dispatcher操作泄漏

本文关键字:泄漏 操作 Dispatcher WPF | 更新日期: 2023-09-27 17:58:19

我在WPF应用程序中看到内存泄漏。在使用.NET内存探查器时,我可以看到,即使在关闭一个窗口后,DataContext和UI元素仍然保留着,因为Dispatcher队列中DispatcherOperations中的Action委托。。。但是具有ContextIdle优先级并且似乎从未被处理。

当我的窗口关闭时,我可以强制Dispatcher队列刷新吗?

WPF Dispatcher操作泄漏

您可以尝试使用dispatcher包含对伪方法的同步调用。在Window.Clossing事件中以ContextIdle优先级调用。这应该会阻止UI线程生成更多的调度程序项,并且应该只在处理完最后一个ContextIdle项之后返回。然而,我无法验证这一点,因为如果没有Telerik组件,ContextIdle项目无论如何都会在窗口关闭之前得到处理。

我还可以想象,这些项目在一个循环中运行,即在执行过程中重新创建它们自己。在这种情况下,在关闭窗口之前将DataContext显式设置为null可能会有所帮助。这可能会向组件发出信号,表明它们可以停止循环,并且至少不会以这种方式泄露数据上下文对象的实例。