Maison >développement back-end >C++ >Comment exécuter des tâches en arrière-plan dans les applications WPF sans geler l'interface utilisateur ?

Comment exécuter des tâches en arrière-plan dans les applications WPF sans geler l'interface utilisateur ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-07 14:45:42452parcourir

How to Execute Background Tasks in WPF Applications Without Freezing the UI?

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

Dans les applications WPF, il est souvent nécessaire d'effectuer des tâches en arrière-plan pour éviter de figer l'interface utilisateur ( interface utilisateur). Pour ce faire, les développeurs ont besoin d'un mécanisme qui répond aux critères suivants :

  • Thème d'interface utilisateur non bloquant
  • Rapport de progression
  • Annulation
  • Multithreading support

Approche recommandée : API basée sur les tâches et Async/Await

Avec la sortie de .NET 4.5 (ou .NET 4.0 avec la bibliothèque Microsoft.Bcl.Async), l'approche recommandée pour les tâches en arrière-plan consiste à utiliser l'API basée sur les tâches et async /attendre. Cette technique offre les avantages suivants :

  • Flux de travail de code pseudo-séquentiel : Les développeurs peuvent écrire du code qui se lit comme un flux de travail séquentiel, ce qui le rend plus facile à comprendre et à maintenir.
  • Gestion structurée des exceptions : Async/await fournit un moyen structuré de gérer les exceptions asynchrones exceptions.

Exemple d'implémentation

Le code suivant montre comment exécuter une tâche en arrière-plan à l'aide de l'API basée sur les tâches et async/await :

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);
    }
}

Ce code génère une nouvelle tâche en parallèle du thread de l'interface utilisateur, permettant à l'interface utilisateur de rester réactive pendant que la tâche en arrière-plan progresse. Il inclut également la gestion des exceptions pour afficher un message d'erreur si une exception se produit pendant l'exécution de la tâche.

Ressources supplémentaires

Pour plus d'informations sur l'exécution de tâches en arrière-plan dans WPF avec rapport de progression et la prise en charge de l'annulation, considérez les références suivantes :

  • [Comment exécuter une tâche en arrière-plan WPF tout en étant capable de fournir un rapport et d'autoriser annulation ?](https://stackoverflow.com/questions/12342842/how-to-execute-task-in-the-wpf-background-while-able-to-provide-report-a)
  • [Async dans 4.5 : activation de la progression et de l'annulation dans Async API](https://blogs.msdn.microsoft.com/charlie/2012/03/14/async-in-4-5-enabling-progress-and-cancellation-in-async-apis/)
  • [Async et Attendre](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)
  • [FAQ Async/Await](https://docs.microsoft .com/en-us/dotnet/csharp/programming-guide/concepts/async/async-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