Process.HasExited Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe um valor que indica se o processo associado foi terminado.
public:
property bool HasExited { bool get(); };
[System.ComponentModel.Browsable(false)]
public bool HasExited { get; }
[<System.ComponentModel.Browsable(false)>]
member this.HasExited : bool
Public ReadOnly Property HasExited As Boolean
Valor de Propriedade
true se o processo do sistema operativo referenciado pelo Process componente terminou; caso contrário, false.
- Atributos
Exceções
Não existe qualquer processo associado ao objeto.
O código de saída do processo não pôde ser recuperado.
Está a tentar aceder à HasExited propriedade de um processo que está a correr num computador remoto. Esta propriedade está disponível apenas para processos que estão a correr no computador local.
Exemplos
O exemplo seguinte inicia uma instância de Notepad. Depois, recupera o uso físico da memória do processo associado a intervalos de 2 segundos durante um máximo de 10 segundos. O exemplo deteta se o processo sai antes de terem passado 10 segundos. O exemplo fecha o processo se este continuar a correr após 10 segundos.
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);
}
}
}
}
open System.ComponentModel
open System.Diagnostics
open System.IO
open System.Threading
try
use myProcess = Process.Start "Notepad.exe"
// Display physical memory usage 5 times at intervals of 2 seconds.
let mutable i = 0
while i < 5 && not myProcess.HasExited do
// Discard cached information about the process.
myProcess.Refresh()
// Print working set to console.
printfn $"Physical Memory Usage: {myProcess.WorkingSet64}"
// Wait 2 seconds.
Thread.Sleep 2000
i <- i + 1
// Close process by sending a close message to its main window.
myProcess.CloseMainWindow() |> ignore
// Free resources associated with process.
myProcess.Close()
with
| :? Win32Exception
| :? FileNotFoundException as e ->
printfn "The following exception was raised: "
printfn $"{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
Observações
Um valor de true para HasExited indica que o processo associado terminou, normalmente ou de forma anormal. Pode solicitar ou forçar a saída do processo associado ligando CloseMainWindow para .Kill Se um handle estiver aberto ao processo, o sistema operativo liberta a memória do processo quando o processo saiu, mas mantém informações administrativas sobre o processo, como o handle, o código de saída e o tempo de saída. Para obter esta informação, pode usar as ExitCode propriedades e ExitTime e. Estas propriedades são preenchidas automaticamente para processos iniciados por este componente. A informação administrativa é divulgada quando todos os Process componentes associados ao processo do sistema são destruídos e já não possuem alavancas para o processo encerrado.
Um processo pode terminar independentemente do seu código. Se iniciar o processo usando este componente, o sistema atualiza automaticamente o valor de HasExited , mesmo que o processo associado saia de forma independente.
Note
Quando a saída padrão foi redirecionada para gestores de eventos assíncronos, é possível que o processamento de saída não tenha sido concluído quando esta propriedade retorna true. Para garantir que o tratamento assíncrono de eventos foi concluído, chame a WaitForExit() sobrecarga que não toma nenhum parâmetro antes de verificar HasExited.