加载并执行外部程序(多次)

时间:2015-05-05 11:48:37

标签: c#

我需要使用参数执行外部程序并从中获取结果(使用不同的参数约1000次)。 我找到了这样的解决方案:

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "qwe 123";
process.Start();
process.WaitForExit();// Waits here for the process to exit.
// And check exit code for result

我需要使用不同的参数进行多次重复,但每次启动新进程时都会使用此代码。这是非常昂贵的操作。我想,我可以“加载”(“保存”)过程并重复它而不是每次启动。 或者可能存在其他方式来解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果启动过程在您的控制之下,那么每次传递输入而不是通过命令行参数传递新流程实例会更有效,但是重新编程它以便流程读取其标准输入行在循环中,处理每一行,并将结果写入其标准输出。将调用程序与进程挂钩很容易。输入和输出:

// ...
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
// ...
process.Start();

StreamReader results = process.StandardOutput;
StreamWriter processInput = process.StandardInput;

foreach( var arg in args )
{
    processInput.WriteLine(arg);
    var oneResult = results.ReadLine();
    // do something with this oneResult
}

此示例假设每个参数都适合一行(并且每个结果也适合一行)。每次写一行都是我们简单的#34;协议"知道何时开始处理(在过程方面)和结果何时完成(在C#方面)。

我或许应该补充一点,一个真正的程序应该添加错误处理,例如评估Process.Start()的返回值。