Maison  >  Article  >  développement back-end  >  Comment introduire des retards dans les opérations WPF sans bloquer l’interface utilisateur ?

Comment introduire des retards dans les opérations WPF sans bloquer l’interface utilisateur ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 02:18:01126parcourir

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

Introduction de délais dans les opérations WPF

Votre objectif de mise en œuvre d'un délai avant de naviguer vers une fenêtre suivante peut être atteint grâce à plusieurs approches dans WPF.

Aperçu du problème :

L'utilisation de Thread.Sleep pour suspendre le fil de discussion avant de naviguer entraîne un blocage de l'interface utilisateur, provoquant l'affichage bref de l'élément d'interface utilisateur avant que la navigation ne se produise.

Solution :

Pour éviter le blocage des threads, vous devez utiliser des techniques d'attente asynchrones telles que les minuteries du répartiteur ou Task.Delay.

Méthode 1 : DispatcherTimer

Créez un minuteur avec un intervalle de 2 secondes et ajoutez un gestionnaire d'événements Tick qui arrêtera le minuteur et affichera la deuxième page lorsque l'intervalle sera écoulé :

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éthode 2 : Task.Delay

Utilisez Task.Delay pour suspendre l'opération asynchrone pendant 2 secondes puis afficher la page suivante :

tbkLabel.Text = "two seconds delay";

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

Méthode 3 : Async/Await (pour .NET 4.5 et versions ultérieures)

Utilisez async/await pour obtenir une attente asynchrone au sein de la méthode et éviter le blocage des threads :

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn