Maison >développement back-end >C++ >Comment puis-je attendre de manière asynchrone la sortie d'un processus dans .NET ?

Comment puis-je attendre de manière asynchrone la sortie d'un processus dans .NET ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 17:28:43808parcourir

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

Processus asynchrone en attente avec Process.WaitForExit()

De nombreuses applications nécessitent d'attendre la fin d'autres processus. Par défaut, l'utilisation de Process.WaitForExit() provoque le blocage du thread appelant, ce qui risque de geler l'interface graphique. Cet article explore une approche basée sur les événements pour réaliser une attente de processus asynchrone dans .NET.

Attente asynchrone basée sur les événements

Avec les améliorations introduites dans .NET 4.0 et C# 5, nous pouvons représenter avec élégance attente asynchrone à l'aide du modèle asynchrone. L'extrait de code suivant montre comment :

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

Utilisation

Pour utiliser la fonctionnalité d'attente asynchrone, invoquez simplement la méthode WaitForExitAsync() sur une instance de Process :

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

   //Do some fun stuff here...
}

Avantages

L'approche asynchrone permet à votre interface graphique de rester réactive en attendant la fin du processus. Cela élimine également le besoin de création manuelle de fils de discussion et de délégation d'événements.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn