首页 >后端开发 >C++ >.NET 中如何异步等待进程退出?

.NET 中如何异步等待进程退出?

Patricia Arquette
Patricia Arquette原创
2025-01-04 17:28:43796浏览

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

异步进程等待 Process.WaitForExit()

许多应用程序需要等待其他进程完成。默认情况下,使用 Process.WaitForExit() 会导致调用线程阻塞,从而可能冻结 GUI。本文探讨了一种基于事件的方法来实现 .NET 中的异步进程等待。

基于事件的异步等待

借助 .NET 4.0 和 C# 5 中引入的增强功能,我们可以优雅地表示使用异步模式进行异步等待。以下代码片段演示了如何操作:

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

用法

要利用异步等待功能,只需在 Process 实例上调用 WaitForExitAsync() 方法即可:

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

   //Do some fun stuff here...
}

优点

异步方法允许您的 GUI 在等待过程完成时保持响应。它还消除了手动创建线程和事件委托的需要。

以上是.NET 中如何异步等待进程退出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn