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
Libérer: 2025-01-04 17:28:43
original
795 Les gens l'ont consulté

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;
}
Copier après la connexion

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...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal