Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous montre comment utiliser la classe Microsoft .NET Framework Process
pour démarrer une autre application à partir de votre code et que le code attend que l’autre application se ferme avant de continuer.
Version du produit d’origine : Visual C# .NET
Numéro de base de connaissances d’origine : 305369
Résumé
Lorsque le code attend la fin de l’application, il existe deux options :
- Attendez indéfiniment que l’autre application se termine ou soit fermée par l’utilisateur.
- Spécifiez une période d’expiration après laquelle vous pouvez fermer l’application à partir de votre code.
Cet article présente deux exemples de code qui illustrent les deux approches. En outre, l’exemple de délai d’attente permet de permettre à l’autre application d’avoir cessé de répondre (suspendu) et d’effectuer les étapes nécessaires pour fermer l’application.
Cet article fait référence à l’espace de noms System.Diagnostics
de bibliothèque de classes .NET Framework suivant.
Inclure des espaces de noms
Vous devez importer l’espace de noms de la Process
classe avant d’exécuter les exemples suivants. Placez la ligne de code suivante avant la déclaration d’espace de noms ou de classe qui contient l’exemple de code :
using System.Diagnostics;
Attendez indéfiniment que l’application shellée se termine
L’exemple de code suivant démarre une autre application (dans ce cas, bloc-notes) et attend indéfiniment que l’application se ferme :
//How to Wait for a Shelled Process to Finish
//Get the path to the system folder.
string sysFolder=
Environment.GetFolderPath(Environment.SpecialFolder.System);
//Create a new process info structure.
ProcessStartInfo pInfo = new ProcessStartInfo();
//Set the file name member of the process info structure.
pInfo.FileName = sysFolder + @"\eula.txt";
//Start the process.
Process p = Process.Start(pInfo);
//Wait for the window to finish loading.
p.WaitForInputIdle();
//Wait for the process to end.
p.WaitForExit();
MessageBox.Show("Code continuing...");
Fournir un délai d’attente pour l’application shellée
L’exemple de code suivant définit un délai d’attente pour l’application shellée. Le délai d’attente de l’exemple est défini sur 5 secondes. Vous pouvez ajuster ce nombre (calculé en millisecondes) pour vos tests.
//Set a time-out value.
int timeOut=5000;
//Get path to system folder.
string sysFolder=
Environment.GetFolderPath(Environment.SpecialFolder.System);
//Create a new process info structure.
ProcessStartInfo pInfo = new ProcessStartInfo();
//Set file name to open.
pInfo.FileName = sysFolder + @"\eula.txt";
//Start the process.
Process p = Process.Start(pInfo);
//Wait for window to finish loading.
p.WaitForInputIdle();
//Wait for the process to exit or time out.
p.WaitForExit(timeOut);
//Check to see if the process is still running.
if (p.HasExited == false)
//Process is still running.
//Test to see if the process is hung up.
if (p.Responding)
//Process was responding; close the main window.
p.CloseMainWindow();
else
//Process was not responding; force the process to close.
p.Kill();
MessageBox.Show("Code continuing...");
Dépannage
Parfois, il peut être difficile de choisir entre ces deux options. L’objectif principal d’un délai d’attente est d’empêcher votre application de s’accrocher, car l’autre application a suspendu. Les délais d’attente sont mieux adaptés à une application shellée qui effectue un traitement en arrière-plan, dans lequel l’utilisateur peut ne pas savoir que l’autre application a bloqué ou n’a pas de moyen pratique de le fermer.