Process.HasExited Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.