【问题标题】:Pipe a stream to Debug.Write()将流通过管道传输到 Debug.Write()
【发布时间】:2013-06-28 17:46:52
【问题描述】:

我正在使用Process.Start 运行命令行实用程序。出于调试目的,我希望将其输出流发送到 Visual Studio 的调试输出面板 (Debug.Write)。我想实时执行此操作,而不是等待该过程完成然后一次全部写入。

我知道这在理论上是可能的,但我对 Stream 对象的经验不足,不知道如何做到这一点。

【问题讨论】:

    标签: c# .net stream stdout


    【解决方案1】:

    这可能不是你想要的,但我认为它会让你走上正轨。

    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);
    }
    

    【讨论】:

    • 谢谢您,先生 - 就是这样。请注意,您不能使用这种技术并且p.StandardOuptut.ReadToEnd() 您必须创建一个StringBuilder 并在事件处理程序中自己构建它。很简单,只是需要注意一些事情。
    • 我们如何通过管道传输自定义数据,例如从调用范围处理到 p_OutputDataReceived 的数据百分比
    【解决方案2】:

    CliWrap 使处理进程变得微不足道。以下是您的特定场景的外观:

    // Pipe the output directly to Debug.WriteLine
    var cmd = Cli.Wrap("app.exe") | Debug.WriteLine;
    
    await cmd.ExecuteAsync();
    

    【讨论】:

    • 哦,天哪,他们使管道操作员过载?在 C# 中?嗯......这是一个有趣的想法,我不会说一个好主意,但是。一个有趣的
    • 嗯,它是一个管道运算符是有原因的;)等到你看到管道运算符与值元组结合。
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2013-07-16
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多