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