我正在使用WPF TreeView向用户显示统计信息。 TreeView通过MVVM绑定到一堆对象。
有时候,当TreeNode确实包含很多项时,显示所有这些项需要几秒钟。在此期间,应用程序似乎卡住了。
我希望TreeView在此延迟期间显示响应。
如果我在WinForms中这样做,我会显示某种加载图标,并在后台线程中进行计算,之后我会更新相应的TreeNode。
在WPF中处理此问题的最佳方法是什么?
答案 0 :(得分:2)
您需要使用线程,以便在处理大量数据时您的应用程序不会卡住。
示例:
在我正在开发的应用程序中,我需要在所有文件夹中搜索特定文件。这会冻结应用程序(甚至不让我最小化窗口),直到完成整个搜索。
为了避免这种情况,我使用了一种名为BackgroundWorker的东西,它让我在后台执行搜索。这意味着我可以在后台进行繁重的工作时控制我的应用程序。
Backgroundworker还有一个WorkerReportsProgress属性。启用此功能后,您可以轻松更新进度条或百分比计数器,让用户知道在工作时发生的情况。
在专业C#4和.NET 4一书中对它进行了很好的解释。 它由Wrox出版。
答案 1 :(得分:1)
使用线程进行UI呼吸。
仅在用户请求时才加载TreeView
和子节点的根节点,方法是单击[+]。
使用Data Virtualization加载,因此仅显示 在UI上实际可见的数据。
通过结合这些技术,即使是你自己的一部分,也会显着提高性能。