Process.HasExited Propriété

Définition

Obtient une valeur indiquant si le processus associé a été arrêté.

public:
 property bool HasExited { bool get(); };
[System.ComponentModel.Browsable(false)]
public bool HasExited { get; }
[<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 Process composant a pris fin ; sinon, false.

Attributs

Exceptions

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

Le code de sortie du processus n’a pas pu être récupéré.

Vous essayez d’accéder à la HasExited propriété pour un processus en cours d’exécution sur un ordinateur distant. Cette propriété est disponible uniquement pour les processus qui s’exécutent 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é à 2 secondes pendant un maximum de 10 secondes. L’exemple détecte si le processus se termine avant 10 secondes. L’exemple ferme le processus s’il est toujours en cours d’exécution après 10 secondes.

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);
            }
        }
    }
}
open System.ComponentModel
open System.Diagnostics
open System.IO
open System.Threading


try
    use myProcess = Process.Start "Notepad.exe"
    // Display physical memory usage 5 times at intervals of 2 seconds.
    let mutable i = 0

    while i < 5 && not myProcess.HasExited do
        // Discard cached information about the process.
        myProcess.Refresh()
        // Print working set to console.
        printfn $"Physical Memory Usage: {myProcess.WorkingSet64}"
        // Wait 2 seconds.
        Thread.Sleep 2000
        i <- i + 1
    // Close process by sending a close message to its main window.
    myProcess.CloseMainWindow() |> ignore
    // Free resources associated with process.
    myProcess.Close()
with
| :? Win32Exception
| :? FileNotFoundException as e ->
    printfn "The following exception was raised: "
    printfn $"{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 pour true laquelle HasExited indique que le processus associé s’est arrêté, normalement ou anormalement. Vous pouvez demander ou forcer la sortie 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 lorsque le processus a quitté, 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 propriétés et ExitTime les ExitCode propriétés. Ces propriétés sont remplies automatiquement pour les processus 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 à jour la valeur de HasExited automatiquement, même si le processus associé s’arrête indépendamment.

Note

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 des événements asynchrones a été terminée, appelez la WaitForExit() surcharge qui ne prend aucun paramètre avant la vérification HasExited.

S’applique à

Voir aussi