Process.HasExited Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um valor que indica se o processo associado foi encerrado.
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 da propriedade
true se o processo do sistema operacional referenciado pelo Process componente tiver terminado; caso contrário, false.
- Atributos
Exceções
Não há nenhum processo associado ao objeto.
O código de saída do processo não pôde ser recuperado.
Você está tentando acessar a HasExited propriedade para um processo em execução em um computador remoto. Essa propriedade está disponível apenas para processos em execução no computador local.
Exemplos
O exemplo a seguir inicia uma instância do Bloco de Notas. Em seguida, recupera o uso de memória física do processo associado em intervalos de 2 segundos por um máximo de 10 segundos. O exemplo detecta se o processo é encerrado antes de 10 segundos terem decorrido. O exemplo fechará o processo se ele ainda estiver em execução 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
Comentários
Um valor para trueHasExited o qual indica que o processo associado foi encerrado, normalmente ou anormalmente. Você pode solicitar ou forçar o processo associado a sair chamando CloseMainWindow ou Kill. Se um identificador estiver aberto ao processo, o sistema operacional liberará a memória do processo quando o processo for encerrado, mas manterá informações administrativas sobre o processo, como o identificador, o código de saída e a hora de saída. Para obter essas informações, você pode usar as propriedades e ExitTime as ExitCode propriedades. Essas propriedades são preenchidas automaticamente para processos iniciados por esse componente. As informações administrativas são divulgadas quando todos os Process componentes associados ao processo do sistema são destruídos e não contêm mais identificadores para o processo encerrado.
Um processo pode ser encerrado independentemente do código. Se você iniciou o processo usando esse componente, o sistema atualiza o valor automaticamente HasExited , mesmo que o processo associado saia de forma independente.
Note
Quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos, é possível que o processamento de saída não tenha sido concluído quando essa propriedade retornar true. Para garantir que a manipulação de eventos assíncrona tenha sido concluída, chame a WaitForExit() sobrecarga que não usa nenhum parâmetro antes de verificar HasExited.