Process.HasExited Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 true
wartość . Aby upewnić się, że obsługa zdarzeń asynchronicznych została ukończona, przed sprawdzeniem HasExitedwywołaj WaitForExit() przeciążenie, które nie ma parametru.