我正在编写一个对其他应用程序进行分析的应用程序, 用户可以选择他想要分析的应用程序并运行它... 一个控制台将被打开,他将看到他的应用程序进度(输出),并将能够随时停止他的应用程序(通过关闭控制台)。
在我这边(运行分析的应用程序),我需要获取用户的应用程序输出(stdout& stderr)并在其上运行一些解析。
总结一下:
(1)用户的应用程序必须在新的控制台窗口中运行,以便用户可以通过关闭新控制台随时停止分析。
(2)用户必须能够在控制台中查看他的应用程序输出,以了解何时停止它。
(3)“父”应用程序需要该输出的副本(实时与否无关)。
尝试重定向流 - 使(3)工作,但(2)不工作..
那么如何在一次运行中同时实现上述所有3个请求? 任何想法??
答案 0 :(得分:0)
好吧,如果有人对解决方案感兴趣,那就明白了:
StringBuilder outStr = new StringBuilder("");
StringBuilder errStr = new StringBuilder("");
process.Start();
process.OutputDataReceived += (sendingProcess, outLine) =>
{
outStr.AppendLine(outLine.Data);
Console.Out.WriteLine(outLine.Data); // echo the output
};
process.ErrorDataReceived += (sendingProcess, errorLine) =>
{
errStr.AppendLine(errorLine.Data);
Console.Error.WriteLine(errorLine.Data); // echo the error
};
process.BeginOutputReadLine();
process.BeginErrorReadLine();