2012-04-04 3 views
2

В моем приложении в VB.NET я запустил приложение и ввел задержку ожидания 20 секунд. Но для загрузки второго приложения время меняется. Можно ли иметь делать во время цикла, аналогичную структуре, как показано ниже:Ждать процесса

Start the application1 
do { 
    sleep(2seconds) 
}until(Application1 Window is loaded 

ответ

2

Вы смотрели на Process.WaitForInputIdle()? Он ждет, пока приложение не вступит в цикл сообщений для своего пользовательского интерфейса (создало окно).

Edit: Смотрите описание MSDN по теме here

1

Самое большое препятствие вы будете сталкиваться, как дочерний процесс сообщает, что он готов. Определение того, загружено ли окно другого процесса, в лучшем случае шаткое. Это намного чище, если вы решите что-то более окончательного

  • Создание конкретного ключа реестра
  • Ввод значения в заданном файле
  • Windows Messages

После того, как вы решите, что тогда это довольно прямая петля

Dim span = TimeSpan.FromSeconds(20) 
Thread.Sleep(span) 
Do While Not IsProcessReady() 
    Thread.Sleep(span) 
Loop 

Как уже говорилось, вам нужно будет выбрать механика sm для связи «загружен», и это становится вашей функцией IsProcessReady

+0

Предполагается, что он контролирует другое приложение. В этом случае я думаю, что IPC-события - лучший способ справиться с этим. Написание магических ключей к реестру или файлу подвержено ошибкам в случае сбоев приложений и т. Д. – aKzenT

+1

@aKzenT хорошая точка, немного добавленная к использованию IPC – JaredPar

Смежные вопросы