Process.HasExited Egenskap

Definition

Hämtar ett värde som anger om den associerade processen har avslutats.

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

Egenskapsvärde

true om operativsystemet som refereras av komponenten Process har avslutats, falseannars .

Attribut

Undantag

Det finns ingen process som är associerad med objektet.

Det gick inte att hämta slutkoden för processen.

Du försöker komma åt HasExited egenskapen för en process som körs på en fjärrdator. Den här egenskapen är endast tillgänglig för processer som körs på den lokala datorn.

Exempel

I följande exempel startas en instans av Anteckningar. Den hämtar sedan den fysiska minnesanvändningen för den associerade processen med 2 sekunders intervall i högst 10 sekunder. Exemplet identifierar om processen avslutas innan 10 sekunder har förflutit. Exemplet stänger processen om den fortfarande körs efter 10 sekunder.

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

Kommentarer

Värdet true för för HasExited anger att den associerade processen har avslutats, antingen normalt eller onormalt. Du kan begära eller tvinga den associerade processen att avslutas genom att anropa CloseMainWindow eller Kill. Om ett handtag är öppet för processen släpper operativsystemet processminnet när processen har avslutats, men behåller administrativ information om processen, till exempel handtaget, slutkoden och sluttiden. Om du vill hämta den här informationen kan du använda ExitCode egenskaperna och ExitTime . Dessa egenskaper fylls i automatiskt för processer som startades av den här komponenten. Den administrativa informationen släpps när alla Process komponenter som är associerade med systemprocessen förstörs och inte innehåller fler referenser till den avslutade processen.

En process kan avslutas oberoende av din kod. Om du startade processen med den här komponenten uppdaterar systemet värdet för automatiskt, även om den associerade processen avslutas oberoende av HasExited varandra.

Anmärkning

När standardutdata har omdirigerats till asynkrona händelsehanterare är det möjligt att bearbetningen av utdata inte har slutförts när den här egenskapen returnerar true. För att säkerställa att asynkron händelsehantering har slutförts anropar du den WaitForExit() överlagring som inte tar någon parameter innan du kontrollerar HasExited.

Gäller för

Se även