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. L'esempio rileva se il processo viene chiuso prima di 10 secondi.The example detects whether the process exits before 10 seconds have elapsed. L'esempio chiude 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 'Main
    End Class 'MyProcessClass
End Namespace 'Process_Sample

Commenti

Un valore pari true per HasExited indica che il processo associato è stato terminato normalmente o in modo anomalo.A value of true for HasExited indicates that the associated process has terminated, either normally or abnormally. È possibile richiedere o forzare il processo venga terminato chiamando CloseMainWindow o Kill.You can request or force the associated process to exit by calling CloseMainWindow or Kill. Se un handle aperto per il processo, il sistema operativo rilascia la memoria del processo durante il processo è stato terminato, ma conserva le informazioni amministrative relative al processo, ad esempio l'handle, codice di uscita e fase 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 la ExitCode e ExitTime proprietà.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 viene rilasciate quando tutti i Process componenti associati con il processo di sistema vengono eliminati definitivamente e conservano gli handle non è più 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.

Indipendentemente dal codice possibile terminare un processo.A process can terminate independently of your code. Se è stato avviato il processo di utilizzo di questo componente, il sistema aggiorna il valore di HasExited automaticamente, anche se il processo associato viene terminato 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 è stato reindirizzato per gestori eventi asincroni, è possibile che l'elaborazione di output verrà non completati quando questa proprietà restituisce true.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 gestione asincrona degli eventi è stata completata, chiamare il WaitForExit() overload che non accetta alcun parametro prima di archiviare HasExited.To ensure that asynchronous event handling has been completed, call the WaitForExit() overload that takes no parameter before checking HasExited.

Sicurezza

LinkDemand
per un'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