外部控制台应用控制

时间:2013-04-29 12:07:28

标签: c# .net file-io console-application

我正在尝试解决一项艰巨的任务,其中一部分是几年前编写的控制台应用程序。控制台应用程序的源代码已丢失,重写它很可能需要几百个小时。我已经能够使用控制台应用程序通过使用以下代码段将其入侵到顶级应用程序:

solver = new Process();
solver.StartInfo.FileName = "HPTSolver.exe";
solver.StartInfo.UseShellExecute = false;
solver.StartInfo.RedirectStandardInput = true;
solver.Start();

然后我可以通过

提供必要的输入参数来触发控制台应用程序
solver.StandardInput.WriteLine("RunCalculation");

控制台应用程序的结果保存到文本文件中,在顶级应用程序中,我当前等待创建文件,然后继续:

while (!File.Exists("result.txt"))
    Thread.Sleep(50);

所以最后我的问题与我等待创建结果文件的最后部分有关。虽然我目前的解决方案有效但显然是最天真的解决方案。有没有更好的解决方案来检测结果文件的创建并允许顶级应用程序继续?我已经尝试过读取控制台应用程序的标准输出,但只在应用程序关闭时输出数据,所以这不是一个选项。

2 个答案:

答案 0 :(得分:1)

您是否考虑过使用FileSystemWatcher?

MSDN Link

希望有所帮助

答案 1 :(得分:1)

等待控制台应用程序退出怎么样?

solver = new Process();
solver.StartInfo.FileName = "HPTSolver.exe";
solver.StartInfo.UseShellExecute = false;
solver.StartInfo.RedirectStandardInput = true;
solver.Start();

solver.WaitForExit()

或者您可以抓住StdOut并观察特定消息。