"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 introduzir atrasos nas operações WPF sem bloquear o thread da interface do usuário?

Como introduzir atrasos nas operações WPF sem bloquear o thread da interface do usuário?

Publicado em 2024-11-20
Navegar:103

How to Introduce Delays in WPF Operations Without Blocking the UI Thread?

Alcançando atrasos em operações WPF com abordagens alternativas

Ao tentar introduzir um atraso antes de executar uma operação no WPF, é importante evitar usar Thread.Sleep, pois isso abordagem bloqueia o thread da UI e pode levar a interfaces de usuário que não respondem. Em vez disso, considere aproveitar técnicas de programação assíncrona.

Abordagem DispatcherTimer

Uma opção é empregar um DispatcherTimer. Este temporizador é executado no thread de UI e chama seu manipulador de eventos Tick 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();
};

Task.Delay Approach

Outra abordagem envolve o uso de Task.Delay:

tbkLabel.Text = "two seconds delay";

Task.Delay(2000).ContinueWith(_ => {
    var page = new Page2();
    page.Show();
});

Aqui, o programa cria uma tarefa que é concluída após um atraso de 2 segundos e então invoca o delegado de continuação para mostrar a nova página.

Async/Await Approach (para .NET 4.5 e posterior)

Finalmente, para projetos direcionados ao .NET 4.5 ou superior, o padrão async/await fornece uma maneira concisa e conveniente de lidar atrasos:

public async void TheEnclosingMethod()
{
    tbkLabel.Text = "two seconds delay";

    await Task.Delay(2000);
    var page = new Page2();
    page.Show();
}

Ao aproveitar técnicas assíncronas, os desenvolvedores podem introduzir atrasos nas operações do WPF sem comprometer a capacidade de resposta da UI.

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