Utilisation des opérations asynchrones en attente d'attente de l'utilisateur dans les applications UWP
Ce guide montre comment arrêter temporairement l'exécution d'une méthode asynchrone dans une application Universal Windows Platform (UWP) jusqu'à ce qu'un événement spécifique, tel qu'un clic à bouton, soit déclenché. Ceci est particulièrement utile lorsqu'un processus asynchrone à long terme (GetResults
dans cet exemple) nécessite une interaction utilisateur avant de continuer.
Méthode 1: Utilisation de SemaphoreSlim
comme signal
La classe SemaphoreSlim
offre un mécanisme de signalisation simple. Voici comment l'implémenter:
<code class="language-csharp">private SemaphoreSlim signal = new SemaphoreSlim(0, 1); // Initially 0 permits, max 1 // Event handler to release the semaphore private void buttonContinue_Click(object sender, RoutedEventArgs e) { signal.Release(); } // Asynchronous method pausing for the signal private async Task GetResults() { // ... Perform lengthy operations ... await signal.WaitAsync(); // Pause until the signal is released // ... Continue execution after the event ... }</code>
Méthode 2: Leverage TaskCompletionSource<bool>
TaskCompletionSource<bool>
fournit une approche plus flexible en créant un Task<bool>
qui représente l'achèvement de l'interaction utilisateur.
<code class="language-csharp">private TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); // Event handler to set the task's result private void buttonContinue_Click(object sender, RoutedEventArgs e) { tcs.SetResult(true); } // Asynchronous method awaiting task completion private async Task GetResults() { // ... Perform lengthy operations ... await tcs.Task; // Pause until the task completes // ... Continue execution after the event ... }</code>
Les deux méthodes cassent efficacement l'opération asynchrone GetResults
jusqu'à ce que l'événement spécifié se produise, en évitant les techniques de sondage inefficaces. Choisissez la méthode qui convient le mieux à l'architecture et à la complexité de votre application.
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!