Process.HasExited Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene un valore che indica se il processo associato è stato terminato.
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
Valore della proprietà
true
se il processo del sistema operativo cui fa riferimento il componente Process è stato terminato; in caso contrario, false
.
- Attributi
Eccezioni
Nessun processo è associato all'oggetto.
Non è stato possibile recuperare il codice di uscita del processo.
Si sta provando ad accedere alla proprietà HasExited per un processo in esecuzione in un computer remoto. Questa proprietà è disponibile solo per i processi in esecuzione nel computer locale.
Esempio
Nell'esempio seguente viene avviata un'istanza del Blocco note. Recupera quindi l'utilizzo della memoria fisica del processo associato a 2 secondi per un massimo di 10 secondi. L'esempio rileva se il processo viene chiuso prima di 10 secondi. L'esempio chiude il processo se è ancora in esecuzione dopo 10 secondi.
#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
Commenti
Un valore di true
per HasExited indica che il processo associato è terminato, normalmente o anormale. È possibile richiedere o forzare l'uscita dal processo associato chiamando CloseMainWindow o Kill. Se un handle è aperto al processo, il sistema operativo rilascia la memoria del processo quando il processo è terminato, ma conserva informazioni amministrative sul processo, ad esempio l'handle, il codice di uscita e l'ora di uscita. Per ottenere queste informazioni, è possibile usare le ExitCode proprietà e ExitTime . Queste proprietà vengono popolate automaticamente per i processi avviati da questo componente. Le informazioni amministrative vengono rilasciate quando tutti i Process componenti associati al processo di sistema vengono eliminati e non contengono più handle per il processo di uscita.
Un processo può terminare in modo indipendente dal codice. Se è stato avviato il processo usando questo componente, il sistema aggiorna automaticamente il valore di HasExited , anche se il processo associato viene chiuso in modo indipendente.
Nota
Quando l'output standard è stato reindirizzato ai gestori eventi asincroni, è possibile che l'elaborazione dell'output non sia stata completata quando questa proprietà restituisce true
. Per assicurarsi che la gestione degli eventi asincrona sia stata completata, chiamare l'overload WaitForExit() che non accetta alcun parametro prima di controllare HasExited.