Gestion des événements asynchrones dans les applications de style Metro C #: une solution propre
La programmation asynchrone est essentielle pour les applications réactives de style métro C # / XAML, empêchant les gels d'interface utilisateur pendant les longues opérations. Cependant, des situations surviennent lorsque l'interaction utilisateur est nécessaire au milieu du processus. Cet article détaille comment attendre efficacement les événements dans les méthodes asynchrones, en pause jusqu'à ce que l'événement déclenche.
Le défi: attendre la saisie de l'utilisateur pendant les opérations asynchrones
Imaginez un scénario: un bouton initie une méthode asynchrone GetResults
. Cette méthode peut nécessiter une entrée utilisateur (par exemple, cliquer sur un bouton "Continuer") avant de continuer. La question clé: comment faire une pause GetResults
jusqu'à l'interaction de l'utilisateur?
Interrogation inefficace: une méthode pour éviter
Une approche simpliste (mais imparfaite) implique un drapeau mis à jour par le gestionnaire d'événements du bouton "Continuer", vérifié à plusieurs reprises dans GetResults
en utilisant Task.Delay
. Ce sondage constant gaspille les ressources et est inefficace.
Solutions élégantes basées sur des événements
C # propose des solutions supérieures à des événements:
1. Utilisation SemaphoreSlim
SemaphoreSlim
comme signal. GetResults
, attendez SemaphoreSlim.WaitAsync
. Cela bloque l'exécution jusqu'à la libération du sémaphore. 2. Tiration de TaskCompletionSource
TaskCompletionSource<bool>
pour représenter le bouton "Continuer" Cliquez sur Résultat. GetResults
, attendez tcs.Task
. L'exécution s'arrête jusqu'à la fin de la tâche. Ces méthodes axées sur les événements offrent un moyen propre et efficace d'intégrer l'interaction des utilisateurs dans les opérations asynchrones, assurant des expériences utilisateur lisses dans des scénarios complexes.
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!