Maison >développement back-end >C++ >Comment gérer efficacement les tâches en arrière-plan dans WPF avec Async/Await ?

Comment gérer efficacement les tâches en arrière-plan dans WPF avec Async/Await ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 14:54:10138parcourir

How to Effectively Manage Background Tasks in WPF with Async/Await?

Exécuter efficacement les tâches en arrière-plan dans WPF

Traditionnellement, les tâches en arrière-plan dans les applications WPF étaient gérées à l'aide d'approches telles que TAP, TPL, BackgroundWorker ou Répartiteur. Cependant, pour les tâches qui nécessitent des critères spécifiques, tels que l'interface utilisateur non bloquante, les rapports de progression, l'annulation et la prise en charge du multithreading, l'approche recommandée a évolué.

Dans .NET 4.5 et versions ultérieures, la meilleure solution consiste à exploiter l'API basée sur les tâches et le modèle asynchrone/attente. Cela permet aux développeurs d'écrire du code de manière séquentielle tout en exécutant des tâches de manière asynchrone en arrière-plan. L'utilisation de la gestion des exceptions est également simplifiée grâce à la gestion structurée des erreurs.

Considérons l'exemple suivant :

private async void Start(object sender, RoutedEventArgs e)
{
    try
    {
        await Task.Run(() =>
        {
            int progress = 0;
            for (; ; )
            {
                System.Threading.Thread.Sleep(1);
                progress++;
                Logger.Info(progress);
            }
        });
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Ici, la méthode Start lance une tâche asynchrone à l'aide de Task.Run(), qui permet à la tâche de s'exécuter simultanément sans interférer avec le thread de l'interface utilisateur. La tâche s'exécute en boucle, incrémentant la progression et enregistrant les informations. La gestion des exceptions est gérée dans le bloc asynchrone.

Cette approche fournit le comportement non bloquant souhaité, permet le rapport de progression, prend en charge l'annulation (via le jeton d'annulation associé à la tâche) et permet à la tâche d'être exécutée sur plusieurs threads si vous le souhaitez.

Pour en savoir plus sur ce sujet, reportez-vous aux ressources suivantes :

  • [Comment exécuter une tâche en arrière-plan WPF tout en étant capable de fournir un rapport et autoriser l'annulation ?](https://stackoverflow.com/questions/642369/how-to-execute-task-in-the-wpf-background-while-able-to-provide-report-and-all)
  • [Async en 4.5 : Activation de la progression et de l'annulation en Async API](https://msdn.microsoft.com/en-us/library/jj193081(v=vs.110).aspx)
  • [Async et Attendre](https://msdn.microsoft.com/en-us/library/hh191443(v=vs.103).aspx)
  • [FAQ Async/Await](https://blogs.msdn .microsoft.com/brada/2011/09/29/async-await-faq/)

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