Partager via


Process.HasExited Propriété

Définition

Obtient une valeur indiquant si le processus associé s'est terminé.

public:
 property bool HasExited { bool get(); };
public bool HasExited { get; }
[System.ComponentModel.Browsable(false)]
public bool HasExited { get; }
member this.HasExited : bool
[<System.ComponentModel.Browsable(false)>]
member this.HasExited : bool
Public ReadOnly Property HasExited As Boolean

Valeur de propriété

true si le processus du système d'exploitation référencé par le composant Process s'est terminé ; sinon, false.

Attributs

Exceptions

Aucun processus n’est associé à l’objet.

Nous n’avons pas pu récupéré le code de sortie pour le processus.

Vous tentez d’accéder à la propriété HasExited d’un processus en cours d’exécution sur un ordinateur distant. Cette propriété est disponible uniquement pour les processus en cours d’exécution sur l’ordinateur local.

Exemples

L’exemple suivant démarre une instance du Bloc-notes. Il récupère ensuite l’utilisation de la mémoire physique du processus associé à intervalles de 2 secondes pendant un maximum de 10 secondes. L’exemple détecte si le processus se termine avant l’expiration de 10 secondes. L’exemple ferme le processus s’il est toujours en cours d’exécution après 10 secondes.

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
   try
   {
      Process^ myProcess;
      myProcess = Process::Start(  "Notepad.exe" );
      
      // Display physical memory usage 5 times at intervals of 2 seconds.
      for ( int i = 0; i < 5; i++ )
      {
         if (  !myProcess->HasExited )
         {
            
            // Discard cached information about the process.
            myProcess->Refresh();
            
            // Print working set to console.
            Console::WriteLine( "Physical Memory Usage : {0}", myProcess->WorkingSet.ToString() );
            
            // Wait 2 seconds.
            Thread::Sleep( 2000 );
         }
         else
         {
            break;
         }

      }
      myProcess->CloseMainWindow();
      
      // Free resources associated with process.
      myProcess->Close();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised: " );
      Console::WriteLine( e->Message );
   }

}
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ProcessSample
{
    class MyProcessClass
    {
        public static void Main()
        {
            try
            {
                using (Process myProcess = Process.Start("Notepad.exe"))
                {
                    // Display physical memory usage 5 times at intervals of 2 seconds.
                    for (int i = 0; i < 5; i++)
                    {
                        if (!myProcess.HasExited)
                        {
                            // Discard cached information about the process.
                            myProcess.Refresh();
                            // Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}");
                            // Wait 2 seconds.
                            Thread.Sleep(2000);
                        }
                        else
                        {
                            break;
                        }
                    }

                    // Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow();
                    // Free resources associated with process.
                    myProcess.Close();
                }
            }
            catch (Exception e) when (e is Win32Exception || e is FileNotFoundException)
            {
                Console.WriteLine("The following exception was raised: ");
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.IO
Imports System.Threading

Namespace Process_Sample
    Class MyProcessClass

        Public Shared Sub Main()
            Try
                Using myProcess = Process.Start("Notepad.exe")
                    ' Display physical memory usage 5 times at intervals of 2 seconds.
                    Dim i As Integer
                    For i = 0 To 4
                        If Not myProcess.HasExited Then

                            ' Discard cached information about the process.
                            myProcess.Refresh()
                            ' Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}")
                            ' Wait 2 seconds.
                            Thread.Sleep(2000)
                        Else
                            Exit For
                        End If

                    Next i

                    ' Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow()
                    ' Free resources associated with process.
                    myProcess.Close()
                End Using
            Catch e As Exception When TypeOf e Is Win32Exception Or TypeOf e Is FileNotFoundException
                Console.WriteLine("The following exception was raised: ")
                Console.WriteLine(e.Message)
            End Try
        End Sub
    End Class
End Namespace 'Process_Sample

Remarques

La valeur de true for HasExited indique que le processus associé s’est terminé, normalement ou anormalement. Vous pouvez demander ou forcer la fermeture du processus associé en appelant CloseMainWindow ou Kill. Si un handle est ouvert au processus, le système d’exploitation libère la mémoire du processus à la sortie du processus, mais conserve des informations administratives sur le processus, telles que le handle, le code de sortie et l’heure de sortie. Pour obtenir ces informations, vous pouvez utiliser les ExitCode propriétés et ExitTime . Ces propriétés sont remplies automatiquement pour les processus qui ont été démarrés par ce composant. Les informations administratives sont publiées lorsque tous les Process composants associés au processus système sont détruits et ne contiennent plus de handles au processus sortant.

Un processus peut se terminer indépendamment de votre code. Si vous avez démarré le processus à l’aide de ce composant, le système met automatiquement à jour la valeur de HasExited , même si le processus associé se termine indépendamment.

Notes

Lorsque la sortie standard a été redirigée vers des gestionnaires d’événements asynchrones, il est possible que le traitement de sortie ne soit pas terminé lorsque cette propriété retourne true. Pour vous assurer que la gestion asynchrone des événements a été effectuée, appelez la WaitForExit() surcharge qui ne prend aucun paramètre avant de vérifier HasExited.

S’applique à

Voir aussi