WPF和用户界面冻结

时间:2016-04-02 07:39:51

标签: wpf user-interface mvvm task freeze

在我的主窗口中,我有

  • 左侧的导航树视图
  • 右侧的内容演示者
  • 某种请等待面板(宽度和高度约为50)显示加载GIF;此面板的可见性绑定到我的主窗口的viewmodel bool属性IsBusy。

初始化内容演示者时,想法是显示此面板。

在树视图中选择项目:

  1. 将bool属性IsBusy设置为true(因此等待面板带有 加载gif节目)
  2. 设置内容演示者
  3. 要初始化此内容,我在主窗口viewmodel中使用一个任务,以便UI保持响应。在此任务中,当我需要更新UI时,我使用Application.Current.Dispatcher.BeginInvoke来操作我的UI线程。这样,当在另一个线程中处理任务时,我的加载gif播放顺利。

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

    我如何确保等待面板始终保持响应并且gif保持平稳播放?

1 个答案:

答案 0 :(得分:0)

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