Heim >Backend-Entwicklung >C++ >Wie kann ich in C# asynchron auf den Prozessausgang warten, ohne die GUI einzufrieren?

Wie kann ich in C# asynchron auf den Prozessausgang warten, ohne die GUI einzufrieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-04 14:25:43494Durchsuche

How Can I Asynchronously Wait for Process Exit in C# Without Freezing the GUI?

Asynchrones Warten auf Prozessbeendigung

In vielen Anwendungen ist es wichtig, auf die Beendigung eines Prozesses zu warten, bevor Sie fortfahren. Die Verwendung von Process.WaitForExit() kann jedoch dazu führen, dass die grafische Benutzeroberfläche (GUI) einfriert. Um dieses Problem zu vermeiden, ist eine ereignisbasierte oder threadbasierte Lösung erforderlich.

Ereignisbasierter Ansatz

Ab .NET 4.0/C# 5 ist die asynchrone Das Muster bietet eine elegantere Möglichkeit, den Warteprozess darzustellen. Die WaitForExitAsync()-Methode kann zur Process-Klasse hinzugefügt werden, sodass die Anwendung asynchron auf das Beenden des Prozesses warten kann:

public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken))

Innerhalb der Methode:

  • Wenn der Prozess bereits beendet wurde, gibt die Methode sofort eine abgeschlossene Aufgabe zurück.
  • Andernfalls wird ein TaskCompletionSource wird erstellt und die EnableRaisingEvents-Eigenschaft des Prozesses wird auf true gesetzt.
  • Ein Ereignishandler wird an das Exited-Ereignis des Prozesses angehängt, der das Ergebnis der Aufgabenabschlussquelle festlegt, wenn der Prozess beendet wird.
  • Wenn ein Abbruchtoken bereitgestellt wird, wird es registriert, um die Aufgabe abzubrechen, wenn sie aufgerufen wird.
  • Die Aufgabe wird zurückgegeben, die abgeschlossen ist, wenn der Prozess beendet wird oder wenn Das Abbruchtoken wird aufgerufen.
  • Verwendung

    So verwenden Sie die WaitForExitAsync()-Methode:

    public async void Test()
    {
        var process = new Process("processName");
        process.Start();
        await process.WaitForExitAsync();
    
        // Do some fun stuff here...
    }

    Das obige ist der detaillierte Inhalt vonWie kann ich in C# asynchron auf den Prozessausgang warten, ohne die GUI einzufrieren?. 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