CÓMO: Esperar a que termine una aplicación de shell mediante C#



No hay soporte técnico disponible para la versión Beta de este producto. Si desea información acerca de cómo obtener soporte técnico para una versión Beta, consulte la documentación incluida con los archivos del producto o busque en el sitio Web desde el que descargó la versión.



Para obtener una versión de Microsoft Visual Basic .NET de este artículo, consulte 305368 .


Para obtener una versión de este artículo para Microsoft Visual C++, consulte 307388 .

EN ESTA TAREA

Resumen

En este artículo se muestra cómo utilizar la clase Process de .NET Framework para iniciar otra aplicación a partir del código y hacer que el código espere a que la otra aplicación se cierre antes de que continúe.


Cuando el código espera a que la aplicación termine, existen dos opciones:


  • Esperar indefinidamente a que la otra aplicación termine o sea cerrada por el usuario.
  • Especificar un tiempo de espera después del que podrá cerrar la aplicación a partir del código.
En este artículo se presentan dos códigos de ejemplo que muestran ambos métodos. Además, el ejemplo de tiempo de espera permite la posibilidad de que la otra aplicación haya dejado de responder (se haya colgado) y realiza los pasos necesarios para cerrar la aplicación.


Requisitos

  • Microsoft C# .NET

Incluir Espacios de nombres

Debe importar el espacio de nombres de la clase Process antes de ejecutar los ejemplos que se presentan a continuación. Coloque la línea de código siguiente antes de la declaración Namespace o Class que contiene el código de ejemplo:
using System.Diagnostics;

Esperar indefinidamente a que la aplicación de shell termine

En el siguiente código de ejemplo se inicia otra aplicación (en este caso, Notepad) y se espera indefinidamente a que la aplicación se cierre.
    //Cómo esperar a que un proceso de shell termine
//Obtiene la ruta a la carpeta del sistema.
string sysFolder=
Environment.GetFolderPath(Environment.SpecialFolder.System);
//Crea una nueva estructura de información del proceso.
ProcessStartInfo pInfo = new ProcessStartInfo();
//Establece el miembro del nombre del archivo de la infraestructura de información del proceso.
pInfo.FileName = sysFolder + @"\eula.txt";
//Inicia el proceso.
Process p = Process.Start(pInfo);
//Espera a que la ventana se termine de cargar.
p.WaitForInputIdle();
//Espera a que el proceso termine.
p.WaitForExit();
MessageBox.Show("El código continúa...");

Proporcionar un tiempo de espera para la aplicación de shell

El código de ejemplo siguiente establece un tiempo de espera para la aplicación de shell. El tiempo de espera del ejemplo está establecido como 5 segundos. Si lo desea puede ajustar este número (que se calcula en milisegundos) para efectuar pruebas.
    //Establece un valor de tiempo de espera.
int timeOut=5000;
//Obtiene la ruta de la carpeta del sistema.
string sysFolder=
Environment.GetFolderPath(Environment.SpecialFolder.System);
//Crea una nueva estructura de información del proceso.
ProcessStartInfo pInfo = new ProcessStartInfo();
//Establece el nombre del archivo que se abrirá.
pInfo.FileName = sysFolder + @"\eula.txt";
//Inicia el proceso.
Process p = Process.Start(pInfo);
//Espera a que la ventana termine de cargarse.
p.WaitForInputIdle();
//Espera a que el proceso se cierre o se agote el tiempo de espera.
p.WaitForExit(timeOut);
//Comprueba si el proceso sigue ejecutándose.
if (p.HasExited == false)
//El proceso sigue ejecutándose.
//Comprueba si el proceso está bloqueado.
if (p.Responding)
//El proceso estaba respondiendo; cerrar la ventana principal.
p.CloseMainWindow();
else
//El proceso no estaba respondiendo; forzar el cierre del proceso.
p.Kill();
MessageBox.Show("El código continúa...");

Solución de problemas

Algunas veces puede resultar difícil elegir entre estas dos opciones. La función principal del tiempo de espera es impedir que la aplicación se cuelgue porque la otra aplicación se haya colgado. Los tiempos de espera son más apropiados para una aplicación de shell que realice un procesamiento en segundo plano, en el que el usuario no sepa que la otra aplicación se ha colgado o no tiene una forma adecuada para cerrarla.


REFERENCIAS

Para obtener más información acerca de la clase Process, consulte la siguiente documentación de la biblioteca de clases de .NET Framework:
Propiedades

Id. de artículo: 305369 - Última revisión: 9 abr. 2003 - Revisión: 1

Comentarios