Heim >Backend-Entwicklung >C++ >Wie kann ich asynchron auf das Beenden eines Prozesses in .NET warten, ohne die GUI zu blockieren?
Warten, bis Prozesse asynchron beendet werden
Es kann schwierig sein, auf den Abschluss eines Prozesses zu warten, ohne die GUI mit Process.WaitForExit( zu blockieren ). Um dieses Problem anzugehen, untersuchen wir einen ereignisgesteuerten Ansatz und eine alternative Lösung unter Verwendung des asynchronen Musters.
In .NET-Versionen vor 4.0 war es notwendig, einen separaten Thread zu erstellen, um auf den Exit zu warten und einen auszulösen Ereignis. Mit der Einführung der asynchronen Programmierung in .NET 4.0 und C# 5 können wir diesen Prozess jedoch nun eleganter darstellen.
Asynchrones Warten mit async und waiting
The Mit dem asynchronen Muster können wir warten, bis der Prozess asynchron beendet wird. Hier ist ein Beispiel:
/// <summary> /// Waits asynchronously for the process to exit. /// </summary> /// <param name="process">The process to wait for cancellation.</param> /// <param name="cancellationToken">A cancellation token. If invoked, the task will return immediately as canceled.</param> /// <returns>A Task representing waiting for the process to end.</returns> public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken)) { if (process.HasExited) return Task.CompletedTask; var tcs = new TaskCompletionSource<object>(); process.EnableRaisingEvents = true; process.Exited += (sender, args) => tcs.TrySetResult(null); if(cancellationToken != default(CancellationToken)) cancellationToken.Register(() => tcs.SetCanceled()); return process.HasExited ? Task.CompletedTask : tcs.Task; }
Verwendung:
public async void Test() { var process = new Process("processName"); process.Start(); await process.WaitForExitAsync(); //Do some fun stuff here... }
Mit der Erweiterungsmethode WaitForExitAsync können Sie warten, bis der Prozess asynchron beendet wird, ohne die GUI zu blockieren . Das Schlüsselwort „await“ unterbricht die Ausführung der Testmethode, bis der Prozess abgeschlossen ist oder das Abbruchtoken ausgelöst wird.
Das obige ist der detaillierte Inhalt vonWie kann ich asynchron auf das Beenden eines Prozesses in .NET warten, ohne die GUI zu blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!