将对象作为值 C# 传递

本文关键字:传递 对象 | 更新日期: 2023-09-27 18:30:39

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

//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); 
}

将对象作为值 C# 传递

Element持有引用,因此它在第二次导航时会丢失其状态。尝试在执行第二个导航之前存储值类型(如 .InnerText )。

我找到了解决这个问题的方法。解决方案是创建一个临时的 WebBrowser 对象,并将其中的元素作为 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);
}

现在我能够访问元素作为: WebBrowser.Document.Body 即使我将原始 WebBrowser 对象导航到另一个页面,它仍然存在。