【发布时间】:2012-09-03 12:29:12
【问题描述】:
我正在开发一个利用 MVVM 模式的中型 WPF 应用程序。 ViewModel 使用INotifyPropertyChanged 来刷新它们各自的视图。
这种方法非常有效,除了一个问题:当这个应用程序长时间运行(3-7 天)时,视图(整个应用程序中的每个视图!)突然停止更新它们的绑定属性。
如果我在 ViewModel 中设置断点,它们就会愉快地离开,调用 PropertyChanged 就像没有任何问题一样。但是,如果我在 View 绑定到的 ViewModel 对象之一的 getter 中设置断点,则永远不会调用 getter!
此时我被难住了,甚至不知道如何正确调试此问题。我检查了 Visual Studio 输出窗口中的数据绑定错误,但一切看起来都很正常。就好像 WPF 数据绑定引擎在后台崩溃了一样。此应用也在监视未处理的异常(AppDomain.UnhandledException 和 Dispatcher.UnhandledException),但没有抛出异常。
总结:经过很长一段时间,Views 停止更新其数据绑定,但 ViewModels 仍在调用 PropertyChanged 事件。
有什么建议吗???
【问题讨论】:
-
有什么建议吗? - 认真考虑按计划重启。 WPF 是一种客户端技术,我不希望它能够 24x7 全天候运行。
-
棘手。在那种情况下,我会选择@HenkHolterman,尽管首先找出为什么会发生这种情况会很有趣......
-
您也可以使用snoop 或类似工具在问题出现时查看该应用程序。它有助于解决损坏的绑定等问题。我不确定在这种情况下我会期望它揭示什么,但它可能会带来一些启示。
-
@HenkHolterman:我想我已经运行了几个月的 WPF 应用程序,最终杀死它们的通常是
ExecutionEngineException。 -
该应用程序的工作集内存是什么样的?页面错误怎么办?
标签: c# wpf data-binding mvvm inotifypropertychanged