Maison >développement back-end >C++ >Comment puis-je éviter le gel de l'interface graphique en attendant la fin du processus asynchrone en C# ?
Achèvement d'un processus asynchrone avec Process.WaitForExit()
En attendant la fin d'un processus à l'aide de Process.WaitForExit(), on peut rencontrer un gel de l'interface graphique en raison de la nature bloquante de la méthode. Pour surmonter ce problème, envisagez d'utiliser une approche basée sur les événements.
Dans .NET 4.0 et C# 5, le modèle asynchrone fournit une solution élégante à ce problème. La méthode d'extension WaitForExitAsync vous permet d'attendre de manière asynchrone la fin d'un processus. Voici le code :
/// <summary> /// Waits asynchronously for the process to exit. /// </summary> /// <param name="process">The process to wait for cancellation.</param> /// <param name="cancellationToken">A cancellation token. If invoked, the task will return immediately as canceled.</param> /// <returns>A Task representing waiting for the process to end.</returns> 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 :
public async void Test() { var process = new Process("processName"); process.Start(); await process.WaitForExitAsync(); //Do some fun stuff here... }
Avec WaitForExitAsync, vous pouvez attendre la fin d'un processus sans bloquer votre interface graphique. Il utilise une approche basée sur les événements pour notifier le code appelant lorsque le processus se termine, permettant ainsi une expérience utilisateur plus réactive et interactive.
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!