C# WebBrowser控件-提交表单后等待页面加载

C# WebBrowser控件-提交表单后等待页面加载,c#,winforms,browser,synchronous,C#,Winforms,Browser,Synchronous,我不熟悉c#及其概念,所以如果这个问题有点愚蠢,我很抱歉。 我尝试使用winforms webbrowser控件进行一些自动化 elements = webBrowser1.Document.GetElementsByTagName("input"); foreach (HtmlElement element in elements) { if (element.GetAttribute("value") == "Anzeigen") element.InvokeMember("

我不熟悉c#及其概念,所以如果这个问题有点愚蠢,我很抱歉。 我尝试使用winforms webbrowser控件进行一些自动化

elements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in elements)
{
    if (element.GetAttribute("value") == "Anzeigen")
    element.InvokeMember("click");
}

while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();

// do some math on recived html
// ......

// show results
MessageBox.Show(numPlanets.ToString() );
因此,为了解释它: 我正在寻找一个值为“ANZEGEN”的按钮,模拟点击它,然后等待新页面加载,然后做我的计算。 不幸的是,我的计算是在旧的HTML内容上完成的,因为它没有等待页面加载。奇怪的是,如果我进入一个线程。睡眠(5000);在foreach循环之后,在模拟单击之前执行该休眠,并且计算也失败

我只需要在不使用事件的情况下,对该单击执行一些同步行为

希望你能帮我,抱歉我的英语不好

编辑: 这样解决: 变量bool WebBrowserFinished=false在类中,如果我想要同步行为,我会这样做:

   webbrowserfinished = false;
   // do navigation here

   while (!webbrowserfinished)
   {
      Application.DoEvents();
      Thread.Sleep(100);
   }
   webbrowserfinished = false;

这并不是最好的解决方案,但您可以在web浏览器导航时启动计时器,并将
timer1.Tick
设置为3000左右,然后在
timer1\u Tick
方法中,您可以在新页面上进行计算,然后
timer1.Stop()

使用事件可能有更好的解决方案,但我自己不太擅长使用web浏览器

你可以试试 在WebBrowser控件完成加载文档时发生

private void Form1_Load(object sender, EventArgs e)
{
   webBrowser1.Navigate("google.com");
   webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   MessageBox.Show("Completed Now!");
}

您可以使用
Thread.sleep(5000)
等待页面加载,因为如果不这样做,导航方法将把一个新文档加载到web浏览器控件中,但它不会调用
document\u complete\u event\u handler

不幸的是,他说“不使用事件”。我的事件问题是,我必须反复这样做。我进入新的一页,做数学,进入新的一页,做数学,进入新的一页。。。。我认为这不能用事件来解决,如果我错了请纠正我为什么不使用事件?这是不可能的,IMO。我经常使用web浏览器控件,包括在中。我从未找到过同步解决方案,因为我确实认为加载只是异步进行的。这似乎也使用了事件;-)