Подождите, пока приложение WPF загрузится после запуска с Process.Start () - PullRequest
2 голосов
/ 14 июля 2010

У меня есть приложение WinForms, которое запускает процесс wpf, работающий с использованием Process.Start. Я хотел бы знать, когда процесс WPF завершит загрузку, и я могу получить доступ к свойству process.MainWindowHandle (его 0 до его полной загрузки).

Я попытался опросить, но дескриптор всегда равен 0. Однако, если я отлаживаю и жду (после Process.Start) загрузки приложения WPF - я получу правильный дескриптор.

Не работает:

int maxCount=100000;
int count=0;
do
{
    wpfProcess.WaitForInputIdle();
    _hWnd = net4ReconProcess.MainWindowHandle;
    count++;
} while (_hWnd.ToInt32() == 0 || count > maxCount);

Ответы [ 2 ]

5 голосов
/ 28 марта 2011

Добавьте process.Refresh(); к циклу while.

1 голос
/ 21 октября 2016

Использование цикла while для WaitForInputIdle не имеет смысла, поскольку этот вызов блокирует текущий поток, пока другой процесс не завершит свою инициализацию. После этого всегда возвращается сразу. Пожалуйста, прочитайте пост WaitForInputIdle действительно должен называться WaitForProcessStartupComplete - Старая новая вещь

Как говорит Рэймонд, это действительно должно называться WaitForProcessStartupComplete.

Вы должны использовать этот код:

if (!wpfProcess.WaitForInputIdle(10000)) // 10 s timout
  throw new ApplicationException("Process takes too much time to start");
_hWnd = net4ReconProcess.MainWindowHandle;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...