在控制台仍在运行的过程中,我可以从控制台应用程序中读取文本吗?

本文关键字:控制台 读取 应用程序 取文本 我可以 运行 过程中 | 更新日期: 2023-09-27 18:05:19

我使用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);    
    }

是否有其他方法从控制台读取文本,而它是打开的?

在控制台仍在运行的过程中,我可以从控制台应用程序中读取文本吗?

可以使用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();
}

您只需向ProcessOutputDataReceived事件添加一个事件处理程序,该事件处理程序在流程输出一行时被调用。
然后,您需要在进程启动后调用BeginOutputReadLine() 以开始接收这些事件。


在本例中,我仍然等待进程退出以完成代码。当然,您不需要等待,事件在进程运行时发生。因此,您可以将process变量存储在成员中并稍后处理它,甚至可以订阅其Exited事件,以便在进程终止时获得通知。