在控制台仍在运行的过程中,我可以从控制台应用程序中读取文本吗?
本文关键字:控制台 读取 应用程序 取文本 我可以 运行 过程中 | 更新日期: 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();
}
您只需向Process
的OutputDataReceived
事件添加一个事件处理程序,该事件处理程序在流程输出一行时被调用。
然后,您需要在进程启动后调用BeginOutputReadLine()
以开始接收这些事件。
在本例中,我仍然等待进程退出以完成代码。当然,您不需要等待,事件在进程运行时发生。因此,您可以将process
变量存储在成员中并稍后处理它,甚至可以订阅其Exited
事件,以便在进程终止时获得通知。