/ / Como posso acelerar a renderização da minha ListBox WPF? - wpf, desempenho, interface do usuário, caixa de listagem

Como posso acelerar a renderização do meu WPF ListBox? - wpf, desempenho, interface do usuário, caixa de listagem

Eu tenho um controle WPF ListBox (ver código) e estou mantendo cerca de 100-200 itens nele.Cada vez que ObservableCollection está sujeito a alterações, embora leve uma fração de segundo para atualizar e congele toda a IU. Existe uma maneira de adicionar elementos de forma incremental ou algo que eu possa fazer para melhorar o desempenho desse controle?

Respostas:

2 para resposta № 1

Tente algo onde (PanelList é um ListBox ou algo assim);

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();

Você deseja executar uma tarefa em segundo plano e atualizar uma IUcontrole incrementalmente através do Dispatcher.Invoke, certifique-se de definir sua prioridade relativamente baixa, e eu sempre dou um sono apenas por diversão (troca de contexto voluntária), também você deve verificar se sua tarefa atual foi cancelada ...

Oh sim, isso não é tanto uma melhoria de desempenho, mas sim o desempenho obtido e a capacidade de resposta da IU.


0 para resposta № 2

Tente definir VirtualizingStackPanel.IsVirtualizing = "True" em sua ListBox - Documentação da MSDN. Veja também postagem no blog Eu me deparei. Não tentei pessoalmente, mas parece um bom lugar para começar. Boa sorte!