C#:逐行获取外部shell命令结果

Cha*_*lie 5 c# shell command process

我正在编写一个C#winform应用程序,它启动第二个进程来执行shell命令,如"dir"和"ping".我重定向第二个进程的输出,以便我的应用程序可以接收命令结果.它大致工作正常.

唯一的问题是我的winform app作为一个整体接收命令行输出而不是逐行接收.例如,它必须等待外部"ping"命令完成(需要几秒或更长时间),然后立即接收整个输出(多行).

我想要的是应用程序实时接收cmdline输出,即通过行而不是块.这可行吗?

我正在使用此代码来读取输出:while((result = proc.StandardOutput.ReadLine())!= null)

但它不像我预期的那样工作.提前致谢.

编辑:这是我正在使用的代码:

    System.Diagnostics.ProcessStartInfo procStartInfo = new 
            System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);

    procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;

    // The following commands are needed to redirect the standard output.
    procStartInfo.RedirectStandardOutput = true;
    procStartInfo.UseShellExecute = false;
    procStartInfo.CreateNoWindow = true;
    // Now we create a process, assign its ProcessStartInfo and start it
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo = procStartInfo;
    proc.Start();

    // Get the output into a string
    string result;
    try {
        while ((result = proc.StandardOutput.ReadLine()) != null)
        {
            AppendRtfText(result+"\n", Brushes.Black);
        }
    } // here I expect it to update the text box line by line in real time
      // but it does not.
Run Code Online (Sandbox Code Playgroud)

Edd*_*ddy 3

查看这篇 msdn 文章中的示例,了解如何完全异步进行读取。

除此之外,我希望您的代码现在可以逐行读取,但 UI 没有任何时间重新绘制(缺少 Application.DoEvents(); 更新 RTFTextBox 后