1

我正在使用 WPF TreeView 向用户显示统计信息。TreeView 通过 MVVM 绑定到一堆对象。

有时,当 TreeNode 确实包含很多项目时,显示所有这些项目需要几秒钟的时间。在此期间,应用程序似乎卡住了。

我希望 TreeView 在此延迟期间显示响应。

如果我在 WinForms 中执行此操作,我会显示某种加载图标,并在后台线程中进行计算,之后我会更新相应的 TreeNode。

在 WPF 中处理此问题的最佳方法是什么?

4

2 回答 2

2

您需要使用线程,以便您的应用程序在处理大量数据时不会出现卡顿。

例子:

在我正在开发的应用程序中,我需要在所有文件夹中搜索特定文件。这会冻结应用程序(甚至不让我最小化窗口),直到它完成整个搜索。

为了避免这种情况,我使用了一个叫做 BackgroundWorker 的东西,它可以让我在后台执行搜索。这意味着我仍然可以控制我的应用程序,同时它在后台进行繁重的工作。

Backgroundworker 还有一个 WorkerReportsProgress 属性。启用此功能后,您可以轻松更新进度条或百分比计数器,让用户知道在工作时发生了什么。

它在 Professional C# 4 and .NET 4 一书中得到了很好的解释。它由 Wrox 出版。

于 2012-04-15T09:46:55.277 回答
1
  1. 使用线程让 UI 呼吸。

  2. 仅在用户请求时才加载根节点TreeView和子节点,方法是单击 [+]。

  3. 使用数据虚拟化加载,因此显示 UI 上实际可见的数据。

通过结合这些技术,即使您已经使用了其中的一部分,也会显着提高性能。

于 2012-04-15T09:55:13.317 回答