


Wie kann ich asynchron auf das Beenden eines Prozesses in .NET warten, ohne die GUI zu blockieren?
Jan 05, 2025 am 05:34 AMWarten, 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
