0

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

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);

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

4

2 回答 2

1

您是否考虑过使用 FileSystemWatcher?

MSDN链接

希望有帮助

保罗

于 2013-04-29T12:12:08.177 回答
1

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

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

solver.WaitForExit()

或者您可以获取 StdOut 并查看特定消息。

于 2013-04-29T16:01:51.243 回答