c# 调用cmd 输出 阻塞 解决
时间: 2023-08-11 12:05:42 浏览: 251
在 C# 中调用 cmd 命令时,如果命令执行时间过长,会导致程序阻塞。为了避免这种情况,可以使用异步方式执行 cmd 命令。
下面是一个示例代码:
```csharp
using System.Diagnostics;
using System.Threading.Tasks;
public static async Task<string> ExecuteCommandAsync(string command)
{
var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command)
{
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true
};
var process = new Process { StartInfo = processInfo };
process.Start();
// 异步读取输出流和错误流
var outputTask = process.StandardOutput.ReadToEndAsync();
var errorTask = process.StandardError.ReadToEndAsync();
// 等待命令执行完成
await process.WaitForExitAsync();
// 获取输出流和错误流的结果
string output = await outputTask;
string error = await errorTask;
return output + error; // 将输出流和错误流合并返回
}
```
在上述代码中,我们使用了 `ProcessStartInfo` 类来配置 cmd 命令的启动参数,然后使用 `Process` 类来启动 cmd 进程并异步读取输出流和错误流。最后,我们使用 `await process.WaitForExitAsync()` 等待命令执行完成,然后将输出流和错误流的结果合并返回。
阅读全文