Problema con procesos externos

05/07/2007 - 11:58 por AiTdX100MIl | Informe spam
Me han propuesto esto para un problema que tenía con la aplicación de que
daba la sensaciónd e colgarse mientras ejecutaba un proceso externo.

Tienes que crear un evento que sea el que inicia tu aplicacion

void IniciaApp()
{
.. etc...
}

y al querer iniciarla pues creas el hilo y le asignas el evento

using System.Threading;
Thread NewProcess = new Thread(new ThreadStart(IniciaApp));
NewProcess.Start();
asi es como lo haces en otro hilo... y pues no es necesario matarlo en
cuanto termina de ejecutarse el evento el hilo se mata solo...

Y yo lo que tengo es:

//Ejecutamos proceso externo
Process proceso = new Process();
proceso.StartInfo.CreateNoWindow = true;
proceso.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proceso.StartInfo.FileName = ejecutable;
proceso.StartInfo.Arguments = argumentos;
proceso.EnableRaisingEvents = true;
proceso.Start();
proceso.WaitForExit();

Entonces como puedo meter este código dentro del evento y como
puedo detener el hilo del programa principal hasta que termine de ejecutarse
sin que el programa de la sensación de haberse colgado refrescándose
correctamente.

Muchas gracias
proceso.Close();
proceso.Dispose();
Aitdx

Aitdx
 

Leer las respuestas

#1 Alberto Poblacion
05/07/2007 - 12:09 | Informe spam
"AiTdX100MIl" wrote in message
news:
[...]
Entonces como puedo meter este código dentro del evento y como
puedo detener el hilo del programa principal hasta que termine de
ejecutarse
sin que el programa de la sensación de haberse colgado refrescándose
correctamente.



No es un evento, sino una subrutina. Símplemente creas una subrutina con
tu código y la lanzas en un hilo separado:

private void LanzarMiProceso()
{
Process proceso = new Process();
proceso.StartInfo.CreateNoWindow = true;
proceso.StartInfo.WindowStyle =
ProcessWindowStyle.Hidden;
proceso.StartInfo.FileName = ejecutable;
proceso.StartInfo.Arguments = argumentos;
proceso.EnableRaisingEvents = true;
proceso.Start();
}

Para lanzarlo:

Thread t = new Thread(LanzarMiProceso);
t.Start();

Con eso, ya está en marcha, y tu programa sigue mientras tanto funcionando
como si nada. Si en algún momento necesitas saber si el proceso ha terminado
o todavía está en marcha, puedes consultarlo con "if (Proceso.HasExited)
...".

Preguntas similares