private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlElement bt = this.webBrowser1.Document.GetElementById("submitFormBtnA");
            if (bt != null)
            {
                //bt.InvokeMember("click");
                Thread t = new Thread(submit);
                t.Start();
            }
        }        private void submit()
        {
            Thread.Sleep(2000);
            HtmlElement ad = this.webBrowser1.Document.GetElementById("submitFormBtnA");
            ad.InvokeMember("click");
        }
本来想在DocumentCompleted时直接点击提交按钮,但是网页在载入后,并没有给表单数据,而是在载入后会用JAVASCRIPT将数据附值给表单,所以需要在DocumentCompleted后再等一两秒再提交按钮,直接在DocumentCompleted中用Thread.Sleep()是不行的,因为界面会假死,WebBrowser并没的继续执行,新建线程,在线程中执行,又出错,好像是因为不能在多线程环境中使用WebBrowser的原因.
求解决办法.

解决方案 »

  1.   

    换成backgroundWorker看看?private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
            { 
                HtmlElement bt = this.webBrowser1.Document.GetElementById("submitFormBtnA"); 
                if (bt != null) 
                { 
                    //bt.InvokeMember("click"); 
                    //Thread t = new Thread(submit); 
                    //t.Start(); 
                    backgroundWorker1.RunWorkerAsync("submit");
                } 
            }         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                hread.Sleep(2000);
                HtmlElement ad = this.webBrowser1.Document.GetElementById("submitFormBtnA");
                ad.InvokeMember("click"); 
            }        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {        }
      

  2.   

    弄一个计时器Timer,2秒钟后执行InvokeMember("click"),随即把Timer再禁用不就行了
      

  3.   


     void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                System.Threading.Thread th = new System.Threading.Thread(
                    new System.Threading.ThreadStart(delegate()
                    {
                        System.Threading.Thread.Sleep(2000);
                        if (webBrowser1.InvokeRequired)
                        {
                            webBrowser1.Invoke(new MethodInvoker(delegate()
                            {
                                HtmlElement ad = webBrowser1.Document.GetElementById("sb");
                                if (ad != null)
                                {
                                    ad.InvokeMember("click");
                                }
                            }));
                        }
                        else
                        {
                            HtmlElement ad = webBrowser1.Document.GetElementById("sb");
                            if (ad != null)
                            {
                                ad.InvokeMember("click");
                            }
                        }
                    }));
                th.Start();
            }