public void ExecuteProcessChain(string[] asProcesses, string sInRedirect, string sOutRedirect)
{
Process p1 = new Process();
p1.StartIn
ReadLine is reading from the output of the first calc. Calc doesn't send any output. So, ReadLine will never return and thus the next calc will not start. When the first calc terminates, ReadLine can no longer read from the first calc, so returns null. After it has returned, the code can start the second calc.
You can either not read from the first calc or read asynchronously. You might want to refer to Async ReadLine on how to read asynchronously.
You could alternatively start the second calc with p2 before you start calling ReadLine.