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
Patricia ArquetteOriginal
2025-01-04 17:28:43808Durchsuche

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;
}

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...
}

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!

Stellungnahme:
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