Process.Exited 事件

在进程退出时发生。

**命名空间:**System.Diagnostics
**程序集:**System(在 system.dll 中)

语法

声明
Public Event Exited As EventHandler
用法
Dim instance As Process
Dim handler As EventHandler

AddHandler instance.Exited, handler
public event EventHandler Exited
public:
event EventHandler^ Exited {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
/** @event */
public void add_Exited (EventHandler value)

/** @event */
public void remove_Exited (EventHandler value)
JScript 支持使用事件,但不支持进行新的声明。

备注

Exited 事件指示关联进程已退出。发生这种情况表示进程终止(已中止)或成功关闭。

关联进程退出时有两种通知方式:同步和异步。同步通知依赖于调用 WaitForExit 方法以在关联组件退出前暂停应用程序的处理。异步通知依赖于 Exited 事件。任何一种情况下,EnableRaisingEvents 都必须设置为 true,以便 Process 组件接收进程退出的通知。

当操作系统关闭进程时,将通知等待退出的所有进程组件。然后组件可使用它拥有的进程的句柄,访问仍驻留在操作系统内存中的关联进程的信息(如 ExitTime 属性)。

因为关联进程已经退出,所以该组件的 Handle 属性不再指向现有进程资源。相反,它仅可用于访问有关进程资源的操作系统信息。系统知道已退出进程的句柄尚未由 Process 组件释放,所以它在内存中保存 ExitTimeHandle 属性信息,直到 Process 组件明确释放这些资源。

提示

即使您有已退出的进程的句柄,也不能再调用 Start 以重新连接到同一进程。调用 Start 将自动释放关联进程,并连接到拥有相同文件但 Handle 为全新的进程。

示例

下面的代码示例创建打印文件的进程。由于在创建进程时设置了 EnableRaisingEvents 属性,因此当该进程退出时将引发 Exited 事件。Exited 事件处理程序将显示进程信息。

Imports System
Imports System.Diagnostics
Imports System.ComponentModel
Imports System.Threading
Imports Microsoft.VisualBasic

Class PrintProcessClass

    Private WithEvents myProcess As New Process
    Private elapsedTime As Integer
    Private eventHandled As Boolean

    ' Print a file with any known extension.
    Sub PrintDoc(ByVal fileName As String)

        elapsedTime = 0
        eventHandled = False

        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.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.
        Const SLEEP_AMOUNT As Integer = 100
        Do While Not eventHandled
            elapsedTime += SLEEP_AMOUNT
            If elapsedTime > 30000 Then
                Exit Do
            End If
            Thread.Sleep(SLEEP_AMOUNT)
        Loop
    End Sub

    ' Handle Exited event and display process information.
    Private Sub myProcess_Exited(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles myProcess.Exited

        eventHandled = True
        Console.WriteLine("Exit time:    {0}" & vbCrLf & _
            "Exit code:    {1}" & vbCrLf & "Elapsed time: {2}", _
            myProcess.ExitTime, myProcess.ExitCode, elapsedTime)
    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 myProcess As New PrintProcessClass
        myProcess.PrintDoc(args(0))
    End Sub
End Class

.NET Framework 安全性

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0

请参见

参考

Process 类
Process 成员
System.Diagnostics 命名空间