Вызывает Process.Refresh (), необходимый для Process.HasFinished - PullRequest
0 голосов
/ 03 мая 2010

Меня интересует, является ли обязательным вызов Process.Refresh () при ожидании завершения процесса путем проверки свойства Process.HasFinished?

У меня есть фрагмент кода, который прекрасно работает без вызова Process.Refresh (), однако мне любопытно, это совпадение? Я вижу, что в примере msdn есть вызов Process.Refresh () ...

Если это не нужно, и Process.HasExited - единственное свойство, которое мне нужно, есть ли какие-либо преимущества для вызова Process.Refresh ()? Если нет, то есть ли причина в примере msdn?

Спасибо за ваши ответы.

Ответы [ 2 ]

4 голосов
/ 03 мая 2010

Как вы заметили, MSDN точно не указывает, какая информация кэшируется и, следовательно, должна обновляться с использованием Process.Refresh().

После короткого (и, вероятно, неполного) анализа класса с использованием отражателя кажется, что свойство HasExited "вычисляется" каждый раз, когда к нему обращаются. Refresh кажется, в основном, для принудительного обновления внутреннего объекта ProcessInfo, который содержит такую ​​информацию, как потребление памяти, информацию о дескрипторе и т. Д.

С другой стороны, Refresh на самом деле не получает всю эту информацию, он просто отбрасывает внутренний кэш. Информация обновляется только при доступе к любому из свойств. Так что Refresh практически не снижает производительность. Поэтому было бы более безопасно вызывать Refresh на тот случай, если Microsoft решит изменить реализацию HasExited в будущем.

0 голосов
/ 03 мая 2010

Непосредственно не отвечает на ваш вопрос, но если вы хотите дождаться завершения процесса, вы можете использовать метод WaitForExit() класса Process.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...