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:
Mostrar la cita
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