Segnalo questo link per chiunque abbia la necessità di lanciare un programma (ad esempio un eseguibile da console, come nel mio caso).

Nel sorgente allegato all'articolo trovate la classe ProcessCaller, che in pratica "wrappa" (quanto mi piace l'inglese...) la classe Process del .NET aggiungendovi la possibilità di redigere l'output della console in modo facile e veloce... tra l'altro la lettura dell'output e la redirezione (ad esempio in una textbox) avvengono in multithreading!

In breve ciò che occorre fare è istanziare il ProcessCaller:

 // Setting up command and arguments
string command = "myCommand";
string arguments = "myArgs";
// Configuring caller
ProcessCaller processCaller = new ProcessCaller(this);
processCaller.FileName = command;
processCaller.Arguments = arguments;
processCaller.StdErrReceived += 
new DataReceivedHandler(WriteStreamInfo);
processCaller.StdOutReceived += 
new DataReceivedHandler(WriteStreamInfo);
processCaller.Completed += 
new EventHandler(ProcessCompletedOrCanceled);
processCaller.Cancelled += 
new EventHandler(ProcessCompletedOrCanceled);
processCaller.Failed += 
new ThreadExceptionEventHandler(ProcessFailed);
// Start process
processCaller.Start();

e creare i relativi delegate x gli eventi:

private void WriteStreamInfo(object sender, DataReceivedEventArgs e)
{
    Debug.WriteLine(e.Text));
}

private void ProcessCompletedOrCanceled(object sender, EventArgs e)
{
    Debug.WriteLine("Work completed");

}

private void ProcessFailed(object sender, ThreadExceptionEventArgs e)
{
    Debug.WriteLine(e.ToString());
}

E il gioco è fatto!

Comodo no?

powered by IMHO 1.2