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

本文关键字:加载 文档 导航 WebBrowser 循环 直到 暂停 | 更新日期: 2023-09-27 18:29:00

我有一个网页,它将我带到另一个页面,其中包含按学生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。请说明如何暂停循环直到它完成加载和解析。非常感谢。

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

试试这样的方法。给你一个大致的想法。。

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");
            }
       }
    }