一个由WebBrowser引起的“未将对象引用设置到对象的实例。”错误

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                String search = "";
                String htmlSource = "";
                String urlDetail = "";
                search = "http://www.szcredit.com.cn/SZCredit/Query/frmQueryList.aspx?MC=[" + textBox1.Text + "]&Type=0";
                htmlSource = Get_Http(@search, 30000);
                urlDetail = SniffwebCode(htmlSource, "frmQueryMode.aspx?", "]");
                urlDetail = "http://www.szcredit.com.cn/SZCredit/Query/frmQueryMode.aspx" + urlDetail + "]";
                urlDetail = urlDetail.Replace("amp;", "");
                webBrowser1.Navigate(urlDetail);
            }
            else
            {
                MessageBox.Show("请填写查询信息!");
            }

            
            
            HtmlElement elemButton = webBrowser1.Document.All.GetElementsByName("btnQuery")[0];
            mshtml.HTMLInputElement button = (mshtml.HTMLInputElement)(elemButton.DomElement);
            button.click();
                }
            }
        }

 

代码如上(写得不好看,对付着看吧,呵呵)

HtmlElement elemButton = webBrowser1.Document.All.GetElementsByName("btnQuery")[0];

点击button1的时候,这段会出现“未将对象引用设置到对象的实例。”,使用new呢,HtmlElement 又不支持。辗转了好久都没能解决,于是逐行调试,偶然发现某一次居然通过了,于是我开始怀疑根本不是代码的使用错误。

仔细观察了那一次正确的调试过程,发现了一个问题,我在代码段之间加入了一些弹出对话框的代码,以显示出变量和控件的状态,导致程序运行的过程被拉长了。

我猛然想到:该不会是因为WebBrowser在Navigate之后还没有加载完,我就运行导致的吧……

于是做了如下更改

            while (1 == 1)
            {
                MessageBox.Show(webBrowser1.ReadyState.ToString());
                if (webBrowser1.ReadyState.ToString() == "Complete")
                {
                    HtmlElement elemButton = webBrowser1.Document.All.GetElementsByName("btnQuery")[0];
                    mshtml.HTMLInputElement button = (mshtml.HTMLInputElement)(elemButton.DomElement);
                    button.click();
                    break;
                }
            }

 

当webBrowser1.ReadyState显示为“Complete”的时候,再执行模拟点击按钮的过程,果然就再没出现“未将对象引用设置到对象的实例。”的错误。

 

看来,往往是因为没有完全加载或者尚未完全运行完过程才是导致“未将对象引用设置到对象的实例。”的主要原因吧。

展开阅读全文

没有更多推荐了,返回首页