// arrêter tous les processus
 private void stopAllProcess()
 {
     foreach (ProcessNode pN in listProcess)
     {
         pN.process.Kill();
         lvProcess.Items.Remove(pN.processViewItem);
     }
     // initialiser les compteurs
     ProcessNode.setBallonCount(0);
     ProcessNode.setPremierCount(0);
     listProcess = new LinkedList <ProcessNode>();
     setViewCounters(0, 0);
 }
 // fonction qui va être appelé lorsque l'utilisateur clique start premier
 private void startPremier_Click(object sender, RoutedEventArgs e)
 {
     if (listProcess.Count == 0 || ProcessNode.getPremierCount() < 5)
     {
         Process p = new Process();
         p.StartInfo           = new ProcessStartInfo("premier.exe");
         p.EnableRaisingEvents = true;
         p.Exited += new EventHandler(process_Exited);
         p.Start();
         int         pid  = p.Id;
         ProcessItem item = new ProcessItem("premier.exe", pid);
         listProcess.AddLast(new ProcessNode(p, "premier", item));
         lvProcess.Items.Add(item);
         setViewCounters(ProcessNode.getBallonCount(), ProcessNode.getPremierCount());
     }
     else
     {
         MessageBox.Show("Cannot create more than 5 processes", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
     }
 }
 // mise à jour la listView lorsque l'utilisateur arrête un fênetre
 private void checkClosedProcess()
 {
     foreach (ProcessNode pN in listProcess)
     {
         if (pN.process.HasExited)
         {
             lvProcess.Items.Remove(pN.processViewItem);
             // mise à jour les compteurs correspondants
             if (pN.name == "ballon")
             {
                 ProcessNode.setBallonCount(ProcessNode.getBallonCount() - 1);
             }
             else
             {
                 ProcessNode.setPremierCount(ProcessNode.getPremierCount() - 1);
             }
             setViewCounters(ProcessNode.getBallonCount(), ProcessNode.getPremierCount());
             listProcess.Remove(pN);
             break;
         }
     }
 }
 // fonction qui va être appelé lorsque l'utilisateur clique stop last process
 private void StopLastProcess_Click(object sender, RoutedEventArgs e)
 {
     if (listProcess.Count <= 0)
     {
         MessageBox.Show("No running process", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
     }
     else
     {
         listProcess.Last().process.Kill();
         lvProcess.Items.Remove(listProcess.Last().processViewItem);
         if (listProcess.Last().name == "ballon")
         {
             ProcessNode.setBallonCount(ProcessNode.getBallonCount() - 1);
         }
         else
         {
             ProcessNode.setPremierCount(ProcessNode.getPremierCount() - 1);
         }
         setViewCounters(ProcessNode.getBallonCount(), ProcessNode.getPremierCount());
         listProcess.RemoveLast();
     }
 }
 // fonction qui va être appelé lorsque l'utilisateur clique stop last ballon
 private void stopLastBallon_Click(object sender, RoutedEventArgs e)
 {
     if (listProcess.Count <= 0 || ProcessNode.getBallonCount() <= 0)
     {
         MessageBox.Show("No running process for ballon.exe", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
     }
     else
     {
         for (int i = listProcess.Count - 1; i >= 0; i--)
         {
             if (listProcess.ElementAt(i).name == "ballon")
             {
                 // obtenir le dernier élément de type ballon de la liste listProcess
                 ProcessNode toRemove = listProcess.ElementAt(i);
                 toRemove.process.Kill();
                 lvProcess.Items.Remove(toRemove.processViewItem);
                 ProcessNode.setBallonCount(ProcessNode.getBallonCount() - 1);
                 setViewCounters(ProcessNode.getBallonCount(), ProcessNode.getPremierCount());
                 listProcess.Remove(toRemove);
                 break;
             }
         }
     }
 }