OutputDataReceived使用事件接收返回
时间: 2024-10-15 16:20:12 浏览: 14
在C#中,当你使用`Process`类的`RedirectStandardOutput`属性将进程的输出重定向到应用程序时,可以利用`OutputDataReceived`事件来实时接收到进程的输出数据。这是一个异步操作,因为它允许你在进程运行时连续获取输出,而不会阻塞主线程。
```csharp
using System.Diagnostics;
public async Task RunCommandWithOutput(string command)
{
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c " + command);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process process = new Process();
process.StartInfo = psi;
process.OutputDataReceived += (sender, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
{
Console.WriteLine($"接收到的数据: {e.Data}");
}
};
await process.BeginOutputReadLine(); // 启动异步读取输出
process.Start();
process.BeginErrorReadLine();
// 等待进程完成
process.WaitForExit();
}
```
在这个例子中,每当有新的输出数据可用时,`OutputDataReceived`回调就会触发,你可以根据需要进一步处理接收到的数据。`BeginOutputReadLine()`和`BeginErrorReadLine()`方法会开始监听输出和错误流。
阅读全文