Condividi tramite


Process.HasExited Proprietà

Definizione

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.

Si applica a

Vedi anche