如何加快WPF ListBox的渲染速度?

时间:2009-05-19 19:06:51

标签: wpf performance user-interface listbox

我有一个WPF ListBox控件(view code),我可能会保留100-200个项目。每次ObservableCollection它都被绑定更改虽然它需要一瞬间更新并冻结整个UI。有没有办法逐步添加元素或我可以做些什么来提高此控件的性能?

2 个答案:

答案 0 :(得分:2)

尝试一下(PanelList是ListBox或其他东西);

new Task(delegate {
   foreach (var info in new DirectoryInfo("C:\\windows\\system32").EnumerateFiles()) {
       PanelList.Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate {
          PanelList.Items.Add(info);
       });
       Thread.Sleep(0);
   }
}).Start();

你想运行一个后台任务并通过Dispatcher.Invoke逐步更新UI控件,确保将你的优先级设置得相对较低,并且我总是为了好玩(自愿上下文交换)而睡觉,你也应该是检查您当前的任务是否已被取消...

哦,是的,这不仅仅是性能提升,而是性能和UI响应能力的提升。

答案 1 :(得分:0)

尝试在ListBox上设置VirtualizingStackPanel.IsVirtualizing =“True” - MSDN Documentation。另见blog post我遇到的情况。我个人没试过,但它似乎是个好地方。祝你好运!