【问题标题】:WPF and user interface freezeWPF 和用户界面冻结
【发布时间】:2016-07-22 02:25:56
【问题描述】:

在我的主窗口中,我有

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

这个想法是在内容展示器初始化时显示这个面板。


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

  1. 将布尔属性 IsBusy 设置为 true(因此等待面板带有 加载 gif 显示)
  2. 设置内容展示器

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


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

如何确保等待面板始终保持响应状态并且 gif 保持流畅播放?

【问题讨论】:

    标签: wpf user-interface mvvm task freeze


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多