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

Preguntas similare

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)
...".
Respuesta Responder a este mensaje
#2 AiTdX100MIl
05/07/2007 - 12:50 | Informe spam
Y si quiero que la aplicacion no haga nada hasta que termine el proceso.
Muchas gracias
Aitdx


"Alberto Poblacion" wrote:

"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)
".


Respuesta Responder a este mensaje
#3 Alberto Poblacion
05/07/2007 - 12:56 | Informe spam
"AiTdX100MIl" wrote in message
news:
Y si quiero que la aplicacion no haga nada hasta que termine el proceso.



Entonces no tiene sentido que crees un hilo. Eso ya lo hacía antes la
aplicación cuando la dejabas parada en el WaitForExit.

Si es una aplicación Windows y lo que quieres es que siga atendiendo
eventos, puedes hacer un bucle de este estilo:

while (!Proceso.HasExited)
{
Application.DoEvents();
System.Threading.Thread.Sleep(50);
}

pero para eso no necesitas un hilo, lo puedes hacer con el código
original que tenías poniendo esta línea en lugar de Proceso.WaitForExit.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida