Heim > Backend-Entwicklung > C++ > Wie kann ich asynchron auf das Beenden eines Prozesses in .NET warten, ohne die GUI zu blockieren?

Wie kann ich asynchron auf das Beenden eines Prozesses in .NET warten, ohne die GUI zu blockieren?

Patricia Arquette
Freigeben: 2025-01-05 05:34:43
Original
195 Leute haben es durchsucht

How Can I Asynchronously Wait for a Process to Exit in .NET without Blocking the GUI?

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;
}
Nach dem Login kopieren

Verwendung:

public async void Test() 
{
   var process = new Process("processName");
   process.Start();
   await process.WaitForExitAsync();

   //Do some fun stuff here...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage