C# 通过管道将流传输到Debug.Write()
我正在使用C# 通过管道将流传输到Debug.Write(),c#,.net,stream,stdout,C#,.net,Stream,Stdout,我正在使用进程.Start运行命令行实用程序。出于调试目的,我希望将其输出流发送到Visual Studio的调试输出面板(Debug.Write)。我希望实时完成这项工作,而不是等待流程完成,然后一次将其全部写入 我知道这在理论上是可能的,但我对流对象的经验不足,不知道如何做到这一点。这可能不是您想要的,但我认为它让您走上了正确的道路 p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true;
进程.Start运行命令行实用程序。出于调试目的,我希望将其输出流发送到Visual Studio的调试输出面板(Debug.Write
)。我希望实时完成这项工作,而不是等待流程完成,然后一次将其全部写入
我知道这在理论上是可能的,但我对流对象的经验不足,不知道如何做到这一点。这可能不是您想要的,但我认为它让您走上了正确的道路
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.OutputDataReceived += p_OutputDataReceived;
p.Start();
p.BeginOutputReadLine();
然后,使用事件处理程序接收数据
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Debug.Write(e.Data);
}
使处理流程变得微不足道。以下是您的特定场景的外观:
//将输出直接传输到Debug.WriteLine
var cmd=Cli.Wrap(“app.exe”)| Debug.WriteLine;
wait cmd.ExecuteAsync();
谢谢您,先生-就是这样。请注意,您不能使用此技术和p.StandardOuptut.ReadToEnd()
您必须创建一个StringBuilder
,并在事件处理程序中自行构建它。很简单,只是需要注意。哦,天哪,他们让管道操作员超负荷工作?在c#中?嗯……这是个有趣的主意,我不认为是个好主意,但是。一个有趣的人这是一个管道操作员的原因;)等待看到管道操作符与值元组组合。