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.TimerePeriodicTimersã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.Rune 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.