Process.HasExited Propriedade

Definição

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.

Aplica-se a

Confira também