Maison > développement back-end > C++ > Comment suspendre l'exécution de la méthode asynchrone jusqu'à ce qu'un événement se produise dans une application de métro?

Comment suspendre l'exécution de la méthode asynchrone jusqu'à ce qu'un événement se produise dans une application de métro?

Patricia Arquette
Libérer: 2025-01-29 17:01:10
original
827 Les gens l'ont consulté

How to Suspend Async Method Execution Until an Event Occurs in a Metro App?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal