Heim > Backend-Entwicklung > C++ > Wie kann ich asynchron auf das Beenden eines Prozesses in .NET warten?

Wie kann ich asynchron auf das Beenden eines Prozesses in .NET warten?

Patricia Arquette
Freigeben: 2025-01-04 17:28:43
Original
795 Leute haben es durchsucht

How Can I Asynchronously Wait for a Process to Exit in .NET?

Asynchroner Prozesswarten mit Process.WaitForExit()

Viele Anwendungen erfordern das Warten auf den Abschluss anderer Prozesse. Standardmäßig führt die Verwendung von Process.WaitForExit() dazu, dass der aufrufende Thread blockiert wird, was möglicherweise zum Einfrieren der GUI führt. In diesem Artikel wird ein ereignisbasierter Ansatz zum Erreichen eines asynchronen Prozesswartens in .NET untersucht.

Ereignisbasiertes asynchrones Warten

Mit den in .NET 4.0 und C# 5 eingeführten Verbesserungen können wir elegant darstellen asynchrones Warten mit dem asynchronen Muster. Der folgende Codeausschnitt zeigt, wie:

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

Um die asynchrone Wartefunktion zu nutzen, rufen Sie einfach die WaitForExitAsync()-Methode auf einer Process-Instanz auf:

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

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

Vorteile

Der asynchrone Ansatz ermöglicht es Ihrer GUI, reaktionsfähig zu bleiben, während Sie auf das warten Vorgang abzuschließen. Außerdem ist keine manuelle Thread-Erstellung und Ereignisdelegierung mehr erforderlich.

Das obige ist der detaillierte Inhalt vonWie kann ich asynchron auf das Beenden eines Prozesses in .NET warten?. 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