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()
方法等待进程执行完成。这样修复后的代码应该能够避免卡死的问题。
桂棹兮兰桨,击空明兮溯流光。