请教 如果DocumentCompleted 在同一页面需要先执行Submit11的click,然后等待他执行完,在执行Submit22的click 处理顺序问题
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //应该第一个处理,等待第一个处理完毕,然后才处理第二个(这里LastUrl页面都是一样的,如果页面不一样很好处理!)
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete && webBrowser1.Url.ToString() == LastUrl)
            {
                HtmlElement buttonSubmit = (HtmlElement)this.webBrowser1.Document.GetElementById("Submit11");
                buttonSubmit.InvokeMember("click");
            }
            //第二个处理
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete && webBrowser1.Url.ToString() == LastUrl)
            {
                HtmlElement buttonSubmit = (HtmlElement)this.webBrowser1.Document.GetElementById("Submit22");
                buttonSubmit.InvokeMember("click");
            }
        }如果我加入控制值 LoadChangeDataNum = 0 ,也不行,因为一旦内部赋值,下面代码页满足条件,继续执行下面的代码        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //应该第一个处理,等待第一个处理完毕,然后才处理第二个
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete && webBrowser1.Url.ToString() == LastUrl && LoadChangeDataNum == 0)
            {
                HtmlElement buttonSubmit = (HtmlElement)this.webBrowser1.Document.GetElementById("Submit11");
                buttonSubmit.InvokeMember("click");
            }
            //应该第二个处理
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete && webBrowser1.Url.ToString() == LastUrl && LoadChangeDataNum == 1)
            {
                HtmlElement buttonSubmit = (HtmlElement)this.webBrowser1.Document.GetElementById("Submit22");
                buttonSubmit.InvokeMember("click");
            }
        }

解决方案 »

  1.   

    事件执行顺序是固定的,你只有通过一些其他方法来顺序执行,比如你在DocumentCompleted方法里自己调用click事件方法,然后将状态设置为false当执行到click事件时判断状态是否已经为false是就不再执行
      

  2.   


    呵呵。自己想了半天。,因为webBrowser1.ReadyState 是只读的,无法赋值。
    加了一个Timer组件,在“应该第一个处理”位置启动Timer,然后再Timer_Click 里面赋值 LoadChangeDataNum == 1 解决了问题