使用InvokeMember c#的无限循环

时间:2014-03-07 09:47:15

标签: c# javascript forms webbrowser-control

我正在尝试标记一些复选框,然后使用webbrowser提交表单,我成功了,问题是我的程序变得无穷无尽,似乎提交的表单,然后我的表单在提交之前,再次提交并再次提交在被提交之前再次......再次....再次....无限地如此。我不明白为什么。

我意识到它发生在这一部分:

form.InvokeMember ("submit");

这是我的代码

private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("https://www.mysite.com");
        }

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

            this.Text = e.Url.ToString() + " loaded";
            webBrowser1.Document.GetElementById("check1").InvokeMember("CLICK");
            webBrowser1.Document.GetElementById("check2").InvokeMember("CLICK");
            webBrowser1.Document.GetElementById("check3").InvokeMember("CLICK");
            webBrowser1.Document.GetElementById("check4").InvokeMember("CLICK");
            webBrowser1.Document.GetElementById("check5").InvokeMember("CLICK");

            foreach (HtmlElement form in webBrowser1.Document.Forms)
            {
                if (form.Name == "SearchForm")
                {
                    form.InvokeMember("submit");

                }   
            }            
        }

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            this.Text = "Navigating";
        }

2 个答案:

答案 0 :(得分:1)

嗯,你说任何时间你完成加载页面,你想提交搜索表单。因此,当提交完成后,它将完成加载页面...并且您将触发相同的事件。这是一个完全自然的循环。

您应该问自己要检测的条件,这意味着您应该在页面加载完成后提交表单。例如,是否在搜索框中没有内容时?或者根据URL进行更改?或者您可能只是想在提交表单之前取消“文档已完成”的事件处理程序?如果没有更多的背景,我们无法真正告诉你,但这就是你设定这种行为的原因。

答案 1 :(得分:0)

Victor,尝试使用不同的表单(* .aspx)进行提交操作。