Process.HasExited Process.HasExited Process.HasExited Process.HasExited Property

Definizione

Ottiene un valore che indica se il processo associato è stato terminato.Gets a value indicating whether the associated process has been terminated.

public:
 property bool HasExited { bool get(); };
[System.ComponentModel.Browsable(false)]
public bool HasExited { get; }
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.true if the operating system process referenced by the Process component has terminated; otherwise, false.

Eccezioni

Nessun processo è associato all'oggetto.There is no process associated with the object.

Non è stato possibile recuperare il codice di uscita del processo.The exit code for the process could not be retrieved.

Si sta provando ad accedere alla proprietà HasExited per un processo in esecuzione in un computer remoto.You are trying to access the HasExited property for a process that is running on a remote computer. Questa proprietà è disponibile solo per i processi in esecuzione nel computer locale.This property is available only for processes that are running on the local computer.

Esempi

Nell'esempio seguente viene avviata un'istanza del blocco note.The following example starts an instance of Notepad. Recupera quindi l'utilizzo della memoria fisica del processo associato a intervalli di 2 secondi per un massimo di 10 secondi.It then retrieves the physical memory usage of the associated process at 2 second intervals for a maximum of 10 seconds. Nell'esempio viene rilevato se il processo viene terminato prima della scadenza di 10 secondi.The example detects whether the process exits before 10 seconds have elapsed. Nell'esempio viene chiuso il processo se è ancora in esecuzione dopo 10 secondi.The example closes the process if it is still running after 10 seconds.

#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 'MyProcessClass
End Namespace 'Process_Sample

Commenti

Il valore true per indica HasExited che il processo associato è stato terminato, in modo normale o anomalo.A value of true for HasExited indicates that the associated process has terminated, either normally or abnormally. È possibile richiedere o forzare la chiusura del processo associato chiamando CloseMainWindow o Kill.You can request or force the associated process to exit by calling CloseMainWindow or Kill. Se un handle è aperto al processo, il sistema operativo rilascia la memoria del processo al termine del processo, ma mantiene le informazioni amministrative sul processo, ad esempio l'handle, il codice di uscita e l'ora di uscita.If a handle is open to the process, the operating system releases the process memory when the process has exited, but retains administrative information about the process, such as the handle, exit code, and exit time. Per ottenere queste informazioni, è possibile usare le ExitCode proprietà ExitTime e.To get this information, you can use the ExitCode and ExitTime properties. Queste proprietà vengono popolate automaticamente per i processi avviati da questo componente.These properties are populated automatically for processes that were started by this component. Le informazioni amministrative vengono rilasciate quando Process tutti i componenti associati al processo di sistema vengono eliminati definitivamente e non contengono più handle per il processo terminato.The administrative information is released when all the Process components that are associated with the system process are destroyed and hold no more handles to the exited process.

Un processo può terminare indipendentemente dal codice.A process can terminate independently of your code. Se il processo è stato avviato utilizzando questo componente, il sistema aggiorna automaticamente il HasExited valore di, anche se il processo associato viene chiuso in modo indipendente.If you started the process using this component, the system updates the value of HasExited automatically, even if the associated process exits independently.

Nota

Quando l'output standard viene reindirizzato ai gestori eventi asincroni, è possibile che l'elaborazione dell'output non venga completata quando questa proprietà truerestituisce.When standard output has been redirected to asynchronous event handlers, it is possible that output processing will not have completed when this property returns true. Per assicurarsi che la gestione asincrona degli eventi sia stata completata, WaitForExit() chiamare l'overload che non accetta parametri HasExitedprima di eseguire il controllo.To ensure that asynchronous event handling has been completed, call the WaitForExit() overload that takes no parameter before checking HasExited.

Sicurezza

LinkDemand
per l'attendibilità totale per il chiamante immediato.for full trust for the immediate caller. Impossibile utilizzare questo membro in codice parzialmente attendibile.This member cannot be used by partially trusted code.

Si applica a

Vedi anche