首页 >后端开发 >C++ >如何在 C# 中异步等待进程退出而不冻结 GUI?

如何在 C# 中异步等待进程退出而不冻结 GUI?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-04 14:25:43450浏览

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

异步等待进程退出

在许多应用程序中,在继续操作之前必须等待进程退出。但是,使用 Process.WaitForExit() 可能会导致图形用户界面 (GUI) 冻结。为了避免此问题,需要基于事件或基于线程的解决方案。

基于事件的方法

从 .NET 4.0/C# 5 开始,异步模式提供了一种更优雅的方式来表示等待过程。可以将 WaitForExitAsync() 方法添加到 Process 类中,使应用程序能够异步等待进程退出:

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

方法内部:

  • 如果进程已经退出,该方法立即返回已完成的任务。
  • 否则,a TaskCompletionSource创建,并将流程的 EnableRaisingEvents 属性设置为 true。
  • 事件处理程序附加到流程的 Exited 事件,该处理程序在流程退出时设置任务完成源的结果。
  • 如果提供了取消令牌,则注册它以在调用时取消任务。
  • 返回任务,当进程退出或当进程退出时任务完成调用取消令牌。

用法

要使用 WaitForExitAsync() 方法:

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

    // Do some fun stuff here...
}

以上是如何在 C# 中异步等待进程退出而不冻结 GUI?的详细内容。更多信息请关注PHP中文网其他相关文章!

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