8

ID 1234のプロセスがあるとします。このプロセスは、アプリケーションが実行される前に実行されています。

私はこのコードを持っています:

        Process app = Process.GetProcessById(1234);
        MessageBox.Show(app.MainWindowTitle);
        app.Exited += this.methodShowsMessageBox;

これで、アプリをコンパイルして実行すると、プロセスが取得され、メインウィンドウのタイトルが表示されます。ただし、プロセス1234を閉じると、app.Exitedは起動しません...これはなぜですか?そして、どうすればそれを発射させることができますか?

4

2 に答える 2

17

ドキュメントには、このイベントが発生EnableRaisingEventsする前に設定する必要があると記載されていることに注意してください。true

于 2010-12-16T03:48:26.220 に答える
3

デフォルトでは、パフォーマンス上の理由から、Processクラスはイベントを発生させません。ProcessオブジェクトでExitedを監視し、そのイベントを発生させる場合は、 EnableRaisingEventsプロパティをtrueに設定する必要があります。

プロセスが終了するのを監視することに関連するコストがあります。EnableRaisingEventsがtrueの場合、関連するプロセスが終了すると、Exitedイベントが発生します。Exitedイベントに指定したプロシージャは、その時点で実行されます。

アプリケーションがプロセスを開始しても、その終了を通知する必要がない場合があります。たとえば、アプリケーションでメモ帳を起動して、ユーザーがテキスト編集を実行できるようにすることができますが、メモ帳アプリケーションをそれ以上使用することはできません。アプリケーションの継続的な操作には関係がないため、プロセスの終了時に通知されないように選択できます。EnableRaisingEventsをfalseに設定すると、システムリソースが節約されます。

于 2010-12-16T03:49:29.820 に答える