WPF 和用户界面冻结

WPF and user interface freeze

在我的主要 window 中,我有

想法是在初始化内容呈现器时显示此面板。


正在树视​​图中选择一个项目:

  1. 将 bool 属性 IsBusy 设置为 true(因此等待面板与 加载 gif 显示)
  2. 设置内容主持人

为了初始化此内容,我在主 window 视图模型中使用了一个任务,以便 UI 保持响应。在此任务中,当我需要更新 UI 时,我使用 Application.Current.Dispatcher.BeginInvoke 来操作我的 UI 线程。这样,当任务在另一个线程中处理时,我的加载 gif 播放流畅。


现在,假设我的内容展示器中有一个包含二十列的数据网格,它绑定到我的主视图模型中的一个 ObservableCollection。在我的任务中,如果我向该集合添加 1000 个项目,当 UI 更新以显示内容时,它会在十分之几秒内变得无响应并且我的 gif 停止;基本上 UI 冻结了。

我怎样才能确保等待面板始终保持响应并且 gif 保持流畅播放?

好吧,我所要做的就是在另一个线程中创建内容呈现器的内容,然后在完成所有操作后将结果分配给我的内容呈现器(例如在 bgw RunWorkCompleted 中)。