1

TestScenarios()シナリオのデータベースをループするメソッドがあり、データベース内の各アイテムについて、指定された URL に移動し、スクリーンショットを撮り、いくつかの値を変更します。

私が問題を抱えているのはwebBrowser1.Navigate(Url);ラインです。関数をステップ実行するとUrl、値がhttp://google.comになりますが、Web コントロールは表示されません。

代わりに、「ナビゲーションがキャンセルされました」という行に沿って何かを言っているだけなので、何かがNavigate()機能の完了を妨げていると私は信じています.

さらに、webBrowser1.Navigate("http://google.com");while ループの外側に線を引くと、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();
        }
    }
}
4

1 に答える 1

2

Web Browser.navigate は非同期で行われます。したがって、ナビゲート(ページリクエストを作成)してから、すぐに次の呼び出しに進みますif url== "http://bing.com"

これを非同期にしたいので、ナビゲーション完了イベントを処理するイベント ハンドラーをセットアップする必要があります。

この質問には、それをどのように適用するかについての情報があります

于 2013-07-22T16:27:21.440 に答える