我可以在控制台静止运行过程中从控制台应用程序中读取文本吗

时间:2016-09-01 09:30:28

标签: c# process console

我使用ProcessStartInfo运行控制台应用程序,ProcessStartInfo可以在控制台关闭后从控制台读取文本:

using (Process p = Process.Start(st))
{
    //Thread.Sleep(2000);
    p.WaitForExit();
    using (StreamReader rd = p.StandardOutput)
    {
        result = rd.ReadToEnd();
        p.Close();

        String result1 = String.Copy(result);    
    }

是否还有另一种方法可以在控制台打开时从控制台读取文本?

1 个答案:

答案 0 :(得分:0)

您可以使用Process

OutputDataReceived
string result = string.Empty;
using (Process process = new Process())
{
    process.StartInfo = st; // your ProcessStartInfo
    StringBuilder resultBuilder = new StringBuilder();
    process.OutputDataReceived += (sender, e) =>
    {
        st.AppendLine(e.Data);
    };

    process.Start();

    process.BeginOutputReadLine();
    process.WaitForExit();
    result = resultBuilder.ToString();
}

您只需向Process的{​​{1}}事件添加事件处理程序,只要进程输出一行,就会调用该事件处理程序。
然后,您需要在过程开始后调用BeginOutputReadLine() 以开始接收这些事件。

在这个例子中,我仍然等待进程退出只是为了完成代码。当然,您无需等待,在进程运行时会发生事件。因此,您可以将OutputDataReceived变量存储在成员中并稍后进行处理,甚至可以订阅其Exited事件,以便在流程终止时获得通知。