Tópico

Threads de UI / tema de processamento periódico

Página de tema que reúne, para percorrer de uma só vez, WPF / WinForms, threads de UI, async/await, Dispatcher e a escolha entre timers.

Por que este tema costuma dar problema

No WPF / WinForms, no instante em que assincronia, atualização da UI e tarefas periódicas se misturam, fica difícil enxergar qual thread executa o quê. Este tema serve para acompanhar, em um só conjunto, congelamentos da UI, atualizações entre threads e dúvidas na escolha de timers.

  • Não está claro para onde a execução volta depois de um await
  • Processamento que deveria rodar na UI se mistura com o que deveria ir para segundo plano
  • As responsabilidades de DispatcherTimer, System.Threading.Timer e PeriodicTimer são vagas
  • Fica difícil enxergar uma forma de manter o código de WinForms / WPF com facilidade

Questões comuns nas consultas

  • .Result / .Wait() ainda presentes, com a tela travando com facilidade
  • A fronteira entre Task.Run e a atualização da UI é indefinida
  • A execução periódica está espalhada pelo código, gerando drift e execuções duplicadas
  • Reduzir a dependência da thread de UI sem comprometer as responsabilidades da tela

Abordagem recomendada

Nesta área, em vez de olhar async / await isolado e timers isolados, na prática funciona melhor organizar a thread de UI e as tarefas periódicas em conjunto. Vendo juntos o grupo de artigos relacionados e as páginas de serviço, fica mais fácil decidir se é melhor começar pela decisão de projeto ou pela correção da implementação.

Consulte-nos

Se esta página se aproxima da situação que você enfrenta, consulte-nos informando o contexto atual e o tipo de apoio de que precisa.

Voltar ao início