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