Atrasar operações no WPF
Atrasar uma operação no WPF é essencial para melhorar a experiência do usuário e garantir transições suaves. Um cenário comum é adicionar um atraso antes de navegar para uma nova janela.
Para conseguir isso, Thread.Sleep é frequentemente usado, conforme mostrado no trecho de código fornecido. No entanto, bloquear o thread da UI com Thread.Sleep faz com que a UI não responda enquanto o atraso está em andamento. Isso se manifesta como uma breve exibição da mensagem "atraso de dois minutos" antes de navegar para a próxima página.
Para resolver essa limitação, é recomendado usar técnicas assíncronas como DispatcherTimer, Task.Delay ou async/await.
Método 1: usando um DispatcherTimer
A classe DispatcherTimer fornece uma maneira de executar uma ação após um intervalo especificado.
tbkLabel.Text = "two seconds delay"; var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) }; timer.Start(); timer.Tick = (sender, args) => { timer.Stop(); var page = new Page2(); page.Show(); };
Método 2: Usando Task.Delay
Task.Delay é um método que retorna uma tarefa que é concluída após um atraso especificado.
tbkLabel.Text = "two seconds delay"; Task.Delay(2000).ContinueWith(_ => { var page = new Page2(); page.Show(); });
Método 3: usando Async/Await (requer .NET 4.5 ou superior)
A sintaxe assíncrona/await fornece uma maneira mais elegante e legível de lidar com assíncronas operações.
public async void TheEnclosingMethod() { tbkLabel.Text = "two seconds delay"; await Task.Delay(2000); var page = new Page2(); page.Show(); }
Ao usar essas técnicas assíncronas, o thread de UI permanece responsivo e o usuário vê a mensagem de "atraso de dois segundos" durante todo o período de atraso antes de fazer a transição para a nova página sem problemas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3