public void ExecuteProcessChain(string[] asProcesses, string sInRedirect, string sOutRedirect)
{
Process p1 = new Process();
p1.StartIn
Why not use threading?
Consider this: Put each calc into a thread and then start them both. After that make the program wait for them. Only after both threads are done with their jobs (read data) then you can continue.
Remember that threads cannot directly alter data from another thread so I might suggest the use of Invoke or static variables, depending on what you might need.
If possible, you can make use of Task/Parallel library which already have some useful methods to help you on this.
Background Worker is too a way to go.