暂停循环,直到WebBrowser导航并加载文档

时间:2014-11-04 18:56:37

标签: c# webbrowser-control

我有一个网页,它将我带到另一个页面,其中包含有关按学生ID搜索的学生信息。我有一份学生ID列表。我应该从第二页检索学生信息并将其存储在数据表中。这是代码

string id { get ; set ;} 
int lCount;
List<string> ids = new List<string>{"A1201", "A1202", "A1203"};
Datatable result = new Datatable();

private void button1_Click(Object sender, EventArgs e)
{
   for(int i = 0 ; i < totalids ; i++)
   {
      lCount = i;
      webbrowser1.Navigate("http://www.sksit.com");
      webbrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted)
   }
}

private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   if(e.URL.toString() == "http://www.sksit.com")
   {
      HtmlElement el = webbrowser1.Document.GetElementById("sid");
      el.SetAttribute("value", ids[lCount]);

      HtmlElement cl = webbrowser1.Document.GetElementById("Search");
      cl.InvokeMember("click");
   }
   elseif(e.URL.toString() == "http://www.sksit.com/studentprofiles")
   {
      HtmlElement el = webbrowser1.Document.GetElementById("studentinfotab");
      string info = el.InnerHtml;
      string[] tableinfo = info.Split(' ');
      DataRow trow = result.newDataRow();
      for(int j =0 ; j < tableinfo.Count() ; j++)
      {
         trow[j] = tableinfo[j];
      }
      result.Rows.Add(trow);
   }
}

当我在执行后看到结果表时,它没有显示数据。传递单个id时,此代码可以正常工作。当它被放入一个循环中时,没有看到数据,它显示lCount为2.请注意如何暂停循环直到它完成加载和解析。谢谢。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情。给你粗略的想法..

string id { get ; set ;} 
    int lCount;
    List<string> ids = new List<string>{"A1201", "A1202", "A1203"};
    Datatable result = new Datatable();

    private void button1_Click(Object sender, EventArgs e)
    {

          lCount = 0;
          webbrowser1.Navigate("http://www.sksit.com");
          webbrowser1.DocumentCompleted += new                     WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted)

    }

    private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
       if(e.URL.toString() == "http://www.sksit.com")
       {
          HtmlElement el = webbrowser1.Document.GetElementById("sid");
          el.SetAttribute("value", ids[lCount]);

          HtmlElement cl = webbrowser1.Document.GetElementById("Search");
          cl.InvokeMember("click");
       }
       elseif(e.URL.toString() == "http://www.sksit.com/studentprofiles")
       {
          HtmlElement el = webbrowser1.Document.GetElementById("studentinfotab");
          string info = el.InnerHtml;
          string[] tableinfo = info.Split(' ');
          DataRow trow = result.newDataRow();
          for(int j =0 ; j < tableinfo.Count() ; j++)
          {
             trow[j] = tableinfo[j];
          }
          result.Rows.Add(trow);

           //it should be something like this.

           if(iCount < ids.Count){ 
             iCount ++;
             webbrowser1.Navigate("http://www.sksit.com");
            }

       }
    }