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 回答