asynchrone Vorgänge innehatten, die die Benutzereingabe in UWP -Apps erwarten
Diese Anleitung zeigt, wie die Ausführung einer asynchronen Methode innerhalb einer UWP -Anwendung (UNIVERSAL WINDOWS -Plattform) vorübergehend eingestellt werden kann, bis ein bestimmtes Ereignis, wie z. B. eine Schaltfläche Klick, ausgelöst wird. Dies ist besonders nützlich, wenn ein langlebiger asynchroner Prozess (GetResults
in diesem Beispiel) eine Benutzerinteraktion benötigt, bevor er fortfahren.
Methode 1: Verwenden Sie SemaphoreSlim
als Signal
Die SemaphoreSlim
Klasse bietet einen einfachen Signalmechanismus. So implementieren Sie es:
<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>
Methode 2: Nutzung TaskCompletionSource<bool>
TaskCompletionSource<bool>
liefert einen flexibleren Ansatz, indem Sie ein Task<bool>
erstellen, das die Fertigstellung der Benutzerinteraktion darstellt.
<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>
Beide Methoden pausieren den asynchronen Betrieb GetResults
bis zum angegebenen Ereignis effektiv, um ineffiziente Wahlverfragetechniken zu vermeiden. Wählen Sie die Methode, die die Architektur und Komplexität Ihrer Anwendung am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie kann ich die Ausführung der asynchronisierenden Methode aussetzen, bis ein Ereignis in einer Metro -App auftritt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!