【问题标题】:Endless loop with InvokeMember c#InvokeMember c# 的无限循环
【发布时间】:2014-03-07 09:47:15
【问题描述】:

我正在尝试标记一些复选框,然后使用 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";
        }

【问题讨论】:

    标签: c# javascript forms webbrowser-control


    【解决方案1】:

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

    您应该问自己要检测什么条件,这意味着您应该在页面完成加载后提交表单。例如,它应该在搜索框中还没有内容的情况下出现吗?还是根据 URL 进行更改?或者您可能只是想在提交表单之前取消“文档完成”的事件处理程序?如果没有更多上下文,我们真的无法判断,但这就是您设置该行为的原因。

    【讨论】:

    • 您好@Jon 感谢您的回答!,我只想加载页面,然后提交表单,这样我就可以使用提交的表单了。这是你的意思吗?
    • @VictorPCL:是的。听起来您应该在事件处理程序本身中删除事件处理程序,以便它只触发一次。
    • 是的@Jon 它是!我必须在哪个部分删除它?对我来说,我似乎没有在另一个事件处理程序中使用事件处理程序。感谢您的帮助我真的是 webbrowser 控件的新手
    • @VictorPCL:在事件处理方法中,只有DocumentCompleted -= webBrowser1_DocumentCompleted;。您正在隐式重复使用事件处理程序,因为您说过“只要当前文档完成加载,就开始加载另一个文档”。因此,当下一个文档完成加载时,它将再次触发相同的事件处理程序......
    • 你可以在我的问题代码中修改它吗?再次感谢@Jon
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2012-02-27
      • 2011-07-26
      • 2016-08-27
      • 2015-04-29
      • 1970-01-01
      相关资源
      最近更新 更多