我有一个WPF ListBox控件(view code),我可能会保留100-200个项目。每次ObservableCollection它都被绑定更改虽然它需要一瞬间更新并冻结整个UI。有没有办法逐步添加元素或我可以做些什么来提高此控件的性能?
答案 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我遇到的情况。我个人没试过,但它似乎是个好地方。祝你好运!