【问题标题】:While loop interrupting webBrowser navigation?循环中断 webBrowser 导航?
【发布时间】:2013-07-22 16:22:23
【问题描述】:

我有一个方法TestScenarios(),它应该循环遍历一个场景数据库,并且对于数据库中的每个项目,导航到指定的网址,截取屏幕截图并更改一些值。

我遇到问题的行是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();
        }
    }
}

【问题讨论】:

  • 导航是异步的

标签: c# webbrowser-control


【解决方案1】:

Web Browser.navigate 异步发生。所以它正在导航(发出页面请求)然后立即转到下一个呼叫if url== "http://bing.com"

您希望这是异步的,因此您需要设置一个事件处理程序来处理导航完成事件

This Question 为您提供了一些有关如何应用它的信息

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多