WPF调度员操作泄漏

时间:2013-02-08 23:10:09

标签: c# .net wpf dispatcher

我在WPF应用程序中看到内存泄漏。在使用.NET Memory Profiler时,我可以看到,即使在关闭窗口之后,由于Dispatcher队列中的DispatcherOperations中的Action委托,但是DataContext和UI元素都在附近......但是具有ContextIdle优先级并且似乎永远不会得到处理。

我可以在Window关闭时强制Dispatcher队列刷新吗?

1 个答案:

答案 0 :(得分:0)

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

我还可以想象那些项目在循环中运行,即在执行期间重新创建。在这种情况下,在关闭窗口之前将DataContext显式设置为null可能会有所帮助。这可能会向组件发出信号,表明它们可以停止循环,至少你不会以这种方式泄漏datacontext对象的实例。