Process.Exited 事件 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在进程退出时发生。
public:
 event EventHandler ^ Exited;public event EventHandler Exited;member this.Exited : EventHandler Public Custom Event Exited As EventHandler 事件类型
示例
下面的代码示例创建一个打印文件的进程。 当进程退出时,它会引发 Exited 事件, EnableRaisingEvents 因为 属性是在创建进程时设置的。 事件处理程序 Exited 显示进程信息。
using System;
using System.Diagnostics;
using System.Threading.Tasks;
class PrintProcessClass
{
    private Process myProcess;
    private TaskCompletionSource<bool> eventHandled;
    // Print a file with any known extension.
    public async Task PrintDoc(string fileName)
    {
        eventHandled = new TaskCompletionSource<bool>();
        using (myProcess = new Process())
        {
            try
            {
                // Start a process to print a file and raise an event when done.
                myProcess.StartInfo.FileName = fileName;
                myProcess.StartInfo.Verb = "Print";
                myProcess.StartInfo.CreateNoWindow = true;
                myProcess.EnableRaisingEvents = true;
                myProcess.Exited += new EventHandler(myProcess_Exited);
                myProcess.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"An error occurred trying to print \"{fileName}\":\n{ex.Message}");
                return;
            }
            // Wait for Exited event, but not more than 30 seconds.
            await Task.WhenAny(eventHandled.Task,Task.Delay(30000));
        }
    }
    // Handle Exited event and display process information.
    private void myProcess_Exited(object sender, System.EventArgs e)
    {
        Console.WriteLine(
            $"Exit time    : {myProcess.ExitTime}\n" +
            $"Exit code    : {myProcess.ExitCode}\n" +
            $"Elapsed time : {Math.Round((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds)}");
        eventHandled.TrySetResult(true);
    }
    public static async Task Main(string[] args)
    {
        // Verify that an argument has been entered.
        if (args.Length <= 0)
        {
            Console.WriteLine("Enter a file name.");
            return;
        }
        // Create the process and print the document.
        PrintProcessClass myPrintProcess = new PrintProcessClass();
        await myPrintProcess.PrintDoc(args[0]);
    }
}
Imports System.Diagnostics
Class PrintProcessClass
    Private WithEvents myProcess As Process
    Private eventHandled As TaskCompletionSource(Of Boolean)
    ' Print a file with any known extension.
    Async Function PrintDoc(ByVal fileName As String) As Task
        eventHandled = New TaskCompletionSource(Of Boolean)()
        myProcess = New Process
        Using myProcess
            Try
                ' Start a process to print a file and raise an event when done.
                myProcess.StartInfo.FileName = fileName
                myProcess.StartInfo.Verb = "Print"
                myProcess.StartInfo.CreateNoWindow = True
                myProcess.EnableRaisingEvents = True
                AddHandler myProcess.Exited, New EventHandler(AddressOf myProcess_Exited)
                myProcess.Start()
            Catch ex As Exception
                Console.WriteLine("An error occurred trying to print ""{0}"":" &
                vbCrLf & ex.Message, fileName)
                Return
            End Try
            ' Wait for Exited event, but not more than 30 seconds.
            Await Task.WhenAny(eventHandled.Task, Task.Delay(30000))
        End Using
    End Function
    ' Handle Exited event and display process information.
    Private Sub myProcess_Exited(ByVal sender As Object,
            ByVal e As System.EventArgs)
        Console.WriteLine("Exit time:    {0}" & vbCrLf &
            "Exit code:    {1}" & vbCrLf & "Elapsed time: {2}",
            myProcess.ExitTime, myProcess.ExitCode,
            Math.Round((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds))
        eventHandled.TrySetResult(True)
    End Sub
    Shared Sub Main(ByVal args As String())
        ' Verify that an argument has been entered.
        If args.Length <= 0 Then
            Console.WriteLine("Enter a file name.")
            Return
        End If
        ' Create the process and print the document.
        Dim myPrintProcess As New PrintProcessClass
        myPrintProcess.PrintDoc(args(0)).Wait()
    End Sub
End Class
注解
事件 Exited 指示关联的进程已退出。 此事件意味着进程终止 (中止) 或已成功关闭。 仅当 属性true的值为 时,EnableRaisingEvents才会发生此事件。
当关联进程退出时,可通过两种方式获得通知:同步和异步。 同步通知意味着调用 WaitForExit 方法以阻止当前线程,直到进程退出。 异步通知使用 Exited 事件,它允许调用线程同时继续执行。 在后一种情况下, EnableRaisingEvents 必须将 设置为 true ,调用应用程序才能接收 Exited 事件。
当操作系统关闭进程时,它会通知所有其他进程,这些进程已注册 Exited 事件的处理程序。 此时,刚退出的进程句柄可用于访问某些属性,例如 ExitTime , HasExited 操作系统会维护这些属性,直到它完全释放该句柄。
有关在 Windows 窗体 应用程序中使用 Exited 事件的详细信息,请参阅 SynchronizingObject 属性。