Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过管道将流传输到Debug.Write()_C#_.net_Stream_Stdout - Fatal编程技术网

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#中?嗯……这是个有趣的主意,我不认为是个好主意,但是。一个有趣的人这是一个管道操作员的原因;)等待看到管道操作符与值元组组合。