Process.Start 卡死问题解决

首先声明是GPT的功劳

代码如下:

var p = Process.Start(exe, arg);
p.WaitForExit();

现象:调试显示在第一句卡死,压根没走到第二句

GPT分析原因:对于进程启动后卡死的情况,一种可能的原因是标准输出缓冲区已满,导致进程被阻塞无法继续执行。为了解决这个问题,可以添加一个异步读取标准输出的逻辑,确保标准输出能够及时被处理。

修复代码如下:

复制代码
ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe", arguments);
startInfo.RedirectStandardOutput = true; // 启用标准输出重定向
startInfo.UseShellExecute = false; // 禁用操作系统外壳程序

Process process = new Process();
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, e) =>
{
    if (!string.IsNullOrEmpty(e.Data)) // 处理非空输出
    {
        Console.WriteLine(e.Data); // 示例:将输出打印到控制台
    }
};
process.EnableRaisingEvents = true; // 允许捕获退出事件
process.Start();

process.BeginOutputReadLine(); // 异步开始读取标准输出

process.WaitForExit(); // 等待进程执行完成
复制代码

在修复代码中,我们使用 RedirectStandardOutput 属性启用了标准输出重定向,并在进程启动前添加了对 OutputDataReceived 事件的订阅。通过调用 BeginOutputReadLine() 方法,我们异步开始读取标准输出,确保标准输出能够及时被处理。同时,设置 EnableRaisingEvents 属性为 true,允许捕获进程退出事件。最后,调用 WaitForExit() 方法等待进程执行完成。这样修复后的代码应该能够避免卡死的问题。

 

posted on   空明流光  阅读(545)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2021-10-12 npm 相关
2016-10-12 C#子类调用基类构造备忘

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示