Maison > développement back-end > C++ > 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
Libérer: 2024-11-04 02:18:01
original
209 Les gens l'ont consulté

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();
};
Copier après la connexion

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();
});
Copier après la connexion

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal