2011-06-01 1 views
1

Я пытаюсь открыть несколько веб-страниц в том же сеансе IE9. Кажется, что я должен подождать немного времени после открытия первого URL-адреса, прежде чем я смогу открыть остальные, но использование Thread.Sleep кажется хакерским. Есть ли способ, который я могу сделать лучше?Открыть несколько вкладок в IE9 с помощью процесса

foreach (string url in urls) 
{ 
    try 
    { 
     if (!isLaunched) 
     { 
      Process p = new Process(); 
      p.StartInfo.FileName = browser; 
      p.StartInfo.Arguments = url; 
      p.Start(); 

      Thread.Sleep(1000); // somewhere between 500 and 1000 
      isLaunched = true; 
     } 
     else 
     { 
      Process.Start(url); 
     } 
    } 
} 

Примечание: Если я не выжидают время, я в конечном итоге с одной сессии браузера с одной страницы (на последней странице

Update:. - Я попытался p.WaitForInputIdle() но он не работает - Per http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/fe4be58f-9c9d-4e52-8ced-e3cd9c1bbee7 Я также попытался

int i = 0; 
    while (i == 0) 
    { 
     Console.WriteLine("[email protected]!"); 
     Thread.Sleep(100); 
     p.Refresh(); 
     i = p.MainWindowHandle.ToInt32(); 
    } 

но получил сообщение об ошибке:.

Process has exited, so the requested information is not available. 
    at System.Diagnostics.Process.EnsureState(State state) 
    at System.Diagnostics.Process.get_MainWindowHandle() 

Update2: Приведенный ниже код работает (ждет выхода IE9 для выхода), но по-прежнему требует Thread.Sleep (100). Любое меньше, и иногда оно только помещает часть сайтов вверх ... Нет ... царапины, это работает только в том случае, если уже есть сеанс IE. Процесс выходит из-за того, что он передает URL-адрес существующей сессии IE.

   foreach (string url in urls) 
       { 
        try 
        { 
         if (!isLaunched) 
         { 
          Process p = new Process(); 
          p.StartInfo.FileName = browser; 
          p.StartInfo.Arguments = url; 
          p.Start(); 
          p.WaitForExit(); 
          Thread.Sleep(100); 
          isLaunched = true; 
         } 
         else 
         { 
          Process.Start(url); 
         } 
        } 

ответ

0

Не совсем то, что вы просили, но я нашел this

command line switches для т.е. не кажется, поддерживает запуск закладки:/

0
foreach (string url in urls) 
{ 
    try 
    { 
     if (!isLaunched) 
     { 
      Process p = new Process(); 
      p.StartInfo.FileName = browser; 
      p.StartInfo.Arguments = url; 
      p.Start(); 

      if(!p.WaitForInputIdle()){ //Should wait indefinitely until the 
             //process is idle 
       Thread.Sleep(1000);// Just in case the process has no message loop 
      } 

      isLaunched = true; 
     } 
     else 
     { 
      Process.Start(url); 
     } 
    } 
} 
+0

Не работает, если вы делаете Thread.Sleep любой короче, чем около 1000 мс, поэтому я думаю, что это все еще не так. (Что делать, если целевой компьютер работает очень медленно?) – tofutim

+0

Я подозреваю, что ваша программа не имеет пользовательского интерфейса? –

+0

Имеет ли значение, имеет ли Программа пользовательский интерфейс? – tofutim