Process.EnableRaisingEvents プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
プロセスが終了したときに、Exited イベントを発生させるかどうかを取得または設定します。
public:
property bool EnableRaisingEvents { bool get(); void set(bool value); };
public bool EnableRaisingEvents { get; set; }
[System.ComponentModel.Browsable(false)]
public bool EnableRaisingEvents { get; set; }
member this.EnableRaisingEvents : bool with get, set
[<System.ComponentModel.Browsable(false)>]
member this.EnableRaisingEvents : bool with get, set
Public Property EnableRaisingEvents As Boolean
プロパティ値
正常終了または Kill() の呼び出しによって関連付けられたプロセスが終了したときに Exited イベントを発生させる場合は true
。それ以外の場合は false
。 既定値は、false
です。 の EnableRaisingEvents 値が false
の場合でも、プロセスが Exited 終了したと判断された場合、イベントはプロパティ アクセサーによって HasExited 発生します。
- 属性
例
次のコード例では、ファイルを出力するプロセスを作成します。 終了時に EnableRaisingEvents プロセスがイベントを発生させるプロパティを Exited 設定します。 イベント ハンドラーには 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
注釈
プロパティは EnableRaisingEvents 、オペレーティング システムがプロセスをシャットダウンしたときにコンポーネントに通知する必要があるかどうかを示します。 プロパティは EnableRaisingEvents 、非同期処理で使用され、プロセスが終了したことをアプリケーションに通知します。 アプリケーションが終了イベント (終了イベントが発生するまでアプリケーションの処理を中断する) を同期的に待機させるには、 メソッドを WaitForExit 使用します。
注意
Visual Studio を使用していて、プロジェクト内のコンポーネントを Process ダブルクリックすると、 Exited イベント デリゲートとイベント ハンドラーが自動的に生成されます。 追加のコードでは、 プロパティを EnableRaisingEvents に false
設定します。 関連付けられたプロセスが終了したときにイベント ハンドラーを実行するには、このプロパティ true
を に変更する必要があります。
コンポーネントのEnableRaisingEvents値が の場合、または EnableRaisingEvents が true
のときにfalse
HasExited 、コンポーネントによってチェックが呼び出されると、コンポーネントは関連付けられたプロセスの管理情報にアクセスでき、オペレーティング システムによって保存されたままになります。 このような情報には、 ExitTime と が ExitCode含まれます。
関連付けられたプロセスが終了した後、コンポーネントの は Handle 既存のプロセス リソースを指し示さなくなります。 代わりに、プロセス リソースに関するオペレーティング システムの情報へのアクセスにのみ使用できます。 オペレーティング システムは、終了したプロセスに対するハンドルがコンポーネントによってProcess解放されていないことを認識しているため、 と Handle の情報はExitTimeメモリ内に保持されます。
プロセスが終了するのを監視することに関連するコストがあります。 が のtrue
場合EnableRaisingEvents、Exited関連付けられたプロセスが終了するとイベントが発生します。 イベントのプロシージャは、 Exited その時点で実行されます。
場合によっては、アプリケーションでプロセスが開始されますが、その終了の通知は必要ありません。 たとえば、アプリケーションでメモ帳を起動すると、ユーザーはテキスト編集を実行できますが、メモ帳アプリケーションをこれ以上使用することはできません。 アプリケーションの継続的な操作には関係ないため、プロセスが終了したときに通知を回避することを選択できます。 を にfalse
設定EnableRaisingEventsすると、システム リソースを保存できます。
適用対象
こちらもご覧ください
.NET