Maison >développement back-end >C++ >Comment gérer efficacement les tâches en arrière-plan dans WPF avec 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 :
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!