2011-06-01 61 views
1

我試圖在同一個IE9會話中打開多個網頁。似乎我在打開第一個網址之前必須等待一段時間,然後才能打開其餘的網址,但使用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); 
     } 
    } 
} 

注:如果我不等待的時間,我將結束與一個瀏覽器會話與一個頁面(最後一頁

更新: - 我試過p.WaitForInputIdle()但它沒有工作 - 每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)。任何更少的,它有時只是把一部分的網站up ......不...從頭開始,這隻有在IE會話已經存在時纔有效。進程退出是因爲它將url移交給了現有的IE會話。

​​

回答

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 2011-06-01 19:03:09

+0

那麼我懷疑你的程序沒有用戶界面? – 2011-06-01 19:09:24

+0

本程序是否具有UI有什麼區別? – tofutim 2011-06-01 19:13:33

相關問題