Como posso acelerar a prestação do meu WPF ListBox?

votos
2

Eu tenho um controle ListBox WPF (código de vista) e eu estou mantendo talvez como 100-200 itens. Cada vez que o ObservableCollection ele é obrigado a mudanças que ele leva uma fração de segundo para atualizar e que congela toda a interface do usuário. Existe uma maneira de adicionar elementos de forma incremental ou algo que posso fazer para melhorar o desempenho desse controle?

Publicado 19/05/2009 em 20:06
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Tente algo onde (membro do painel é uma caixa de listagem ou algo);

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 de fundo e atualizar um controle UI incrementalmente através Dispatcher.Invoke, certifique-se de definir sua prioridade relativly baixo, e eu sempre jogar um sono em apenas por diversão (voluntarially contexto swap), você também deve verificar se o seu tarefa atual foi cancelada ...

Oh ya, este não é tanto uma melhoria de desempenho como o desempenho precieved e capacidade de resposta da interface do usuário.

Respondeu 26/02/2010 em 16:00
fonte usuário

votos
0

Tente definir VirtualizingStackPanel.IsVirtualizing = "True" no seu ListBox - Documentação MSDN . Veja também este post me deparei. Eu não tentei isso pessoalmente, mas parece ser um bom lugar para começar. Boa sorte!

Respondeu 21/05/2009 em 03:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more