我使用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);
}
是否还有另一种方法可以在控制台打开时从控制台读取文本?
答案 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
事件,以便在流程终止时获得通知。