Проблема с процессом завершена - PullRequest
8 голосов
/ 16 декабря 2010

Допустим, у меня есть процесс с идентификатором 1234. Этот процесс выполняется до запуска моего приложения.

У меня есть этот код:

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

Теперь, когда я компилирую и запускаюприложение, оно получает процесс и показывает заголовок главного окна.Однако когда я закрываю процесс 1234, app.Exited не запускается ... почему это?И как мне заставить его стрелять?

Ответы [ 2 ]

17 голосов
/ 16 декабря 2010

Обратите внимание, что в документации указано, что EnableRaisingEvents должно быть установлено на true, прежде чем сработает это событие.

3 голосов
/ 16 декабря 2010

По умолчанию, по соображениям производительности, класс Process не вызывает события.Если вы хотите, чтобы объект Process наблюдал за Exited и вызывал это событие, вам необходимо установить для его свойства EnableRaisingEvents значение true.

С наблюдением за процессом связана стоимостьвыходить.Если EnableRaisingEvents имеет значение true, событие Exited возникает, когда связанный процесс завершается.Процедуры, которые вы указали для события Exited, выполняются в это время.

Иногда ваше приложение запускает процесс, но не требует уведомления о его закрытии.Например, ваше приложение может запустить «Блокнот», чтобы позволить пользователю выполнять редактирование текста, но больше не использовать приложение «Блокнот».Вы можете не получать уведомления о завершении процесса, поскольку он не имеет отношения к продолжению работы вашего приложения.Установка для параметра EnableRaisingEvents значения false сохраняет системные ресурсы.

...