Process.EnableRaisingEvents Process.EnableRaisingEvents Process.EnableRaisingEvents Process.EnableRaisingEvents Property


プロセスが終了したときに、Exited イベントを発生させるかどうかを取得または設定します。Gets or sets whether the Exited event should be raised when the process terminates.

 property bool EnableRaisingEvents { bool get(); void set(bool value); };
public bool EnableRaisingEvents { get; set; }
member this.EnableRaisingEvents : bool with get, set
Public Property EnableRaisingEvents As Boolean


正常終了または Kill() の呼び出しによって関連付けられたプロセスが終了したときに Exited イベントを発生させる場合は true。それ以外の場合は falsetrue if the Exited event should be raised when the associated process is terminated (through either an exit or a call to Kill()); otherwise, false. 既定値は、false です。The default is false. の値がExited EnableRaisingEvents HasExitedの場合、またはユーザーがチェックを実行する前にプロセスが終了した場合でも、イベントが発生することに注意してください。 falseNote that the Exited event is raised even if the value of EnableRaisingEvents is false when the process exits during or before the user performs a HasExited check.

次のコード例では、ファイルを出力するプロセスを作成します。The following code example creates a process that prints a file. このメソッドはEnableRaisingEvents 、プロパティを設定して、プロセスExitedが終了時にイベントを発生させます。It sets the EnableRaisingEvents property to cause the process to raise the Exited event when it exits. イベントExitedハンドラーは、プロセス情報を表示します。The Exited event handler displays process information.

using System;
using System.Diagnostics;
using System.Threading;

class PrintProcessClass
    private Process myProcess;
    private int elapsedTime;
    private bool eventHandled;

    // Print a file with any known extension.
    public void PrintDoc(string fileName)
        elapsedTime = 0;
        eventHandled = false;

        using (myProcess = new Process())
                // 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);
            catch (Exception ex)
                Console.WriteLine($"An error occurred trying to print \"{fileName}\":\n{ex.Message}");

            // Wait for Exited event, but not more than 30 seconds.
            const int SleepAmount = 100;
            while (!eventHandled)
                elapsedTime += SleepAmount;
                if (elapsedTime > 30000)

    // Handle Exited event and display process information.
    private void myProcess_Exited(object sender, System.EventArgs e)
        eventHandled = true;
            $"Exit time    : {myProcess.ExitTime}\n" +
            $"Exit code    : {myProcess.ExitCode}\n" +
            $"Elapsed time : {elapsedTime}");

    public static void Main(string[] args)
        // Verify that an argument has been entered.
        if (args.Length <= 0)
            Console.WriteLine("Enter a file name.");

        // Create the process and print the document.
        PrintProcessClass myPrintProcess = new PrintProcessClass();
Imports System
Imports System.Diagnostics
Imports System.Threading

Class PrintProcessClass

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

    Public Event Exited As EventHandler

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

        elapsedTime = 0
        eventHandled = False

        Using myProcess = New Process
                ' 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

            Catch ex As Exception
                Console.WriteLine("An error occurred trying to print ""{0}"":" &
                vbCrLf & ex.Message, fileName)
            End Try
        End Using

        ' 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
    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.")
        End If

        ' Create the process and print the document.
        Dim myPrintProcess As New PrintProcessClass
    End Sub
End Class


プロパティEnableRaisingEventsは、オペレーティングシステムがプロセスをシャットダウンしたときにコンポーネントに通知する必要があるかどうかを示します。The EnableRaisingEvents property suggests whether the component should be notified when the operating system has shut down a process. プロパティEnableRaisingEventsは、プロセスが終了したことをアプリケーションに通知するために、非同期処理で使用されます。The EnableRaisingEvents property is used in asynchronous processing to notify your application that a process has exited. アプリケーションが終了イベント (終了イベントが発生するまでアプリケーションの処理を中断する) を同期的に待機するには、 WaitForExitメソッドを使用します。To force your application to synchronously wait for an exit event (which interrupts processing of the application until the exit event has occurred), use the WaitForExit method.


Visual Studio を使用していて、プロジェクト内ProcessのコンポーネントをダブルクリックするExitedと、イベントデリゲートとイベントハンドラーが自動的に生成されます。If you're using Visual Studio and double-click a Process component in your project, an Exited event delegate and event handler are automatically generated. 追加のコードにEnableRaisingEventsよってfalse、プロパティがに設定されます。Additional code sets the EnableRaisingEvents property to false. 関連付けられたプロセスがtrue終了したときにイベントハンドラーが実行されるようにするには、このプロパティをに変更する必要があります。You must change this property to true for your event handler to execute when the associated process exits.

コンポーネントEnableRaisingEventsの値がtrueの場合、 EnableRaisingEvents またはfalseがで、コンポーネントによってチェックが呼び出された場合、コンポーネントは、関連付けられているプロセスの管理情報にアクセスできます。HasExitedオペレーティングシステムによって保存されます。If the component's EnableRaisingEvents value is true, or when EnableRaisingEvents is false and a HasExited check is invoked by the component, the component can access the administrative information for the associated process, which remains stored by the operating system. このような情報ExitTimeにはExitCode、およびが含まれます。Such information includes the ExitTime and the ExitCode.

関連付けられたプロセスが終了Handleすると、コンポーネントのは既存のプロセスリソースを参照しなくなります。After the associated process exits, the Handle of the component no longer points to an existing process resource. 代わりに、プロセスリソースに関するオペレーティングシステムの情報にアクセスするためにのみ使用できます。Instead, it can only be used to access the operating system's information about the process resource. オペレーティングシステムは、コンポーネントによってProcess解放されていないプロセスを終了するハンドルがあることを認識しているので、とHandleExitTime情報をメモリに保持します。The operating system is aware that there are handles to exited processes that haven't been released by Process components, so it keeps the ExitTime and Handle information in memory.

プロセスを終了するための監視に関連するコストが発生します。There's a cost associated with watching for a process to exit. EnableRaisingEvents Exitedの場合、関連付けられたプロセスが終了するとイベントが発生します。 trueIf EnableRaisingEvents is true, the Exited event is raised when the associated process terminates. Exitedイベントのプロシージャは、その時点で実行されます。Your procedures for the Exited event run at that time.

場合によっては、アプリケーションはプロセスを開始しますが、そのクロージャの通知は必要ありません。Sometimes, your application starts a process but doesn't require notification of its closure. たとえば、アプリケーションでメモ帳を起動して、ユーザーがテキスト編集を実行することを許可し、メモ帳アプリケーションをそれ以上使用しないようにすることができます。For example, your application can start Notepad to allow the user to perform text editing but make no further use of the Notepad application. プロセスが終了したときに通知されないようにすることもできます。これは、アプリケーションの継続操作には関係がないためです。You can choose to avoid notification when the process exits because it's not relevant to the continued operation of your application. EnableRaisingEventsfalse設定すると、システムリソースを節約できます。Setting EnableRaisingEvents to false can save system resources.


直前の呼び出し元に対する完全な信頼。for full trust for the immediate caller. このメンバーは、部分的に信頼されているコードから使用することはできません。This member cannot be used by partially trusted code.