Process.HasExited Właściwość

Definicja

Pobiera wartość wskazującą, czy skojarzony proces został zakończony.

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

Wartość właściwości

true jeśli proces systemu operacyjnego, do którego Process odwołuje się składnik, zakończył się; w przeciwnym razie false.

Atrybuty

Wyjątki

Brak procesu skojarzonego z obiektem.

Nie można pobrać kodu zakończenia procesu.

Próbujesz uzyskać dostęp do HasExited właściwości dla procesu uruchomionego na komputerze zdalnym. Ta właściwość jest dostępna tylko dla procesów uruchomionych na komputerze lokalnym.

Przykłady

Poniższy przykład uruchamia wystąpienie Notatnika. Następnie pobiera fizyczne użycie pamięci skojarzonego procesu w 2 sekundach przez maksymalnie 10 sekund. W przykładzie wykryto, czy proces kończy się przed upływem 10 sekund. Przykład zamyka proces, jeśli nadal działa po 10 sekundach.

#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

Uwagi

Wartość true dla HasExited wskazuje, że skojarzony proces został zakończony, zwykle lub nietypowo. Możesz zażądać lub wymusić zakończenie skojarzonego procesu, wywołując polecenie CloseMainWindow lub Kill. Jeśli dojście jest otwarte dla procesu, system operacyjny zwalnia pamięć procesu po zakończeniu procesu, ale zachowuje informacje administracyjne o procesie, takie jak dojście, kod zakończenia i czas zakończenia. Aby uzyskać te informacje, możesz użyć ExitCode właściwości i ExitTime . Te właściwości są wypełniane automatycznie dla procesów, które zostały uruchomione przez ten składnik. Informacje administracyjne są wydawane, gdy wszystkie Process składniki skojarzone z procesem systemowym są niszczone i nie przechowują więcej dojść do procesu zakończenia.

Proces może zakończyć się niezależnie od kodu. Jeśli proces został uruchomiony przy użyciu tego składnika, system aktualizuje wartość HasExited automatycznie, nawet jeśli skojarzony proces zakończy się niezależnie.

Uwaga

Gdy standardowe dane wyjściowe zostały przekierowane do asynchronicznych procedur obsługi zdarzeń, możliwe, że przetwarzanie danych wyjściowych nie zostanie ukończone, gdy ta właściwość zwróci truewartość . Aby upewnić się, że obsługa zdarzeń asynchronicznych została ukończona, przed sprawdzeniem HasExitedwywołaj WaitForExit() przeciążenie, które nie ma parametru.

Dotyczy

Zobacz też