将对象传递为值C#

时间:2014-11-17 05:10:29

标签: c# webbrowser-control parameter-passing argument-passing

我在将WebBrowser对象导航到C#中的URL时将对象:System.Windows.Forms.HtmlElement传递给方法,但是如果我将WebBrowser对象导航到另一个页面,则HtmlElement对象变为null。伪代码是:

//Code to navigate to a page
WebBrowser.Navigate("http://www.google.com");

//pass one of the page's element as parameter in a method
Method(HtmlElement WebBrowser.Document.Body.GetElementsByTagName("input")["search"]);

Method(HtmlElement Element)
{
  //Works fine till now
  MessageBox.Show(Element.InnerText);

  //Code to navigate to another page
  WebBrowser.Navigate("http://www.different_page.com");

  //Here the Element object throws exception because it becomes null after another navigation to another website.
  MessageBox.Show(Element.InnerText); 
}

2 个答案:

答案 0 :(得分:4)

Element持有一个引用,因此它在第二个导航中失去了它的状态。在执行第二次导航之前,请尝试存储值类型(例如.InnerText)。

答案 1 :(得分:1)

我找到了解决问题的方法。解决方案是创建一个临时WebBrowser对象,并将其中的Element作为OuterHtml直接传递到正文中,然后导航到该DOM文本,就像它是页面的响应HTML一样:

Method(HtmlElement Element)
{
  MessageBox.Show(Element.InnerText);

  WebBrowser WebBrowser = new WebBrowser();

  WebBrowser.DocumentText = "<html><head></head><body>" + Element.OuterHtml + "</body></html>";

  while (WebBrowserReadyState.Complete != WebBrowser.ReadyState)
            Application.DoEvents();

  MessageBox.Show(WebBrowser.Document.Body.InnerText);
}

现在我可以访问Element:WebBrowser.Document.Body即使我将原始WebBrowser对象导航到另一个页面,它仍然存在。