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é 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.