"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar o congelamento da interface do usuário ao atrasar operações no WPF?

Como evitar o congelamento da interface do usuário ao atrasar operações no WPF?

Publicado em 2024-11-06
Navegar:747

How to Avoid UI Freezing When Delaying Operations in WPF?

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.

Tutorial mais recente Mais>

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