2013-07-22 45 views
1

我有一个方法TestScenarios()它应该循环通过方案的数据库,并为数据库中的每个项目,导航到指定的网址,截图,并更改一些值。while循环中断webBrowser导航?

我遇到问题的线路是webBrowser1.Navigate(Url);线路。当我逐步完成此功能时,Url的值为http://google.com,但Web控件从不显示。

相反,它只是说“导航已被取消”,这导致我相信某些事情正在中断完成的功能Navigate()功能。

此外,如果我在while循环外面贴一条线webBrowser1.Navigate("http://google.com");,它将显示Web控件,这意味着webBrowser控件似乎正常工作。

基本上我只是需要一些方向的帮助。代码如下。

public void TestScenarios() 
{ 
    using (SqlConnection conn = new SqlConnection(connectionString)) 
    { 
     conn.Open(); 
     using (SqlCommand cmd = new SqlCommand("SELECT * FROM Scenarios WHERE MarkedForDeletion!='1'", conn)) 
     { 
      SqlDataReader reader = cmd.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        // Store scenario information 
        int Id = (int) reader["ScenarioID"]; 
        string Data = reader["ScenarioData"].ToString(); 
        string Url = reader["ScenarioURL"].ToString(); 

        // Navigate to webBrowser 
        webBrowser1.Navigate(Url); 

        // Do test 
        int HasSucceeded = 0; 
        if (Url == "http://bing.com") 
        { 
         HasSucceeded = 1; 
        } 

        // Take Screenshot 
        Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
        Graphics g = Graphics.FromImage(bitmap); 
        g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size); 
        ImageConverter converter = new ImageConverter(); 
        Byte[] screenshot = (byte[])converter.ConvertTo(bitmap, typeof(byte[])); 

        // Insert results 
        InsertResults(Id, HasSucceeded, screenshot); 

        // Delete scenario 
        // DeleteScenario(Id); 

        // Mark scenario for deletion 
        MarkScenario(Id); 
       } 
      } 
      reader.Close(); 
     } 
    } 
} 
+1

Navigate is Asynchronous –

回答

2

Web Browser.navigate是异步发生的。因此,它是导航(使页面请求),然后立即移动到下一个电话if url== "http://bing.com"

你想这是 - 异步,所以你需要设置一个事件处理程序来处理导航完成事件

This Question有一些关于你如何应用的信息

+0

Awes。 tytytytyty –