C# Can';在C中使用WebBrowser提取超链接#

C# Can';在C中使用WebBrowser提取超链接#,c#,multithreading,browser,C#,Multithreading,Browser,我在尝试从web文档提取超链接时遇到问题 我尝试使用的方法如下所示: HtmlElementCollection ht = wb.Document.Links; foreach (HtmlElement item in ht) { if (item.GetAttribute("href").Contains("name")) { linkList.Add(item.GetAttribute("href")); } } 执行此代码时,我得到错误“指定的强

我在尝试从web文档提取超链接时遇到问题

我尝试使用的方法如下所示:

HtmlElementCollection ht = wb.Document.Links;

foreach (HtmlElement item in ht)
{
    if (item.GetAttribute("href").Contains("name"))
    {
        linkList.Add(item.GetAttribute("href"));
    }
}
执行此代码时,我得到错误“指定的强制转换无效”。我想问题在于,执行此代码的方法是在webbrowser以外的单独线程上调用的。在同一个线程上,调用该方法没有问题。

您可以尝试此代码

        HtmlElementCollection hc = webBrowser1.Document.GetElementsByTagName("a");
        for (int i = 0; i < hc.Count; i++)
        {
            if (hc[i].GetAttribute("href") == "name")
                listBox1.Items.Add(hc[i].InnerHtml);// Or InnerText
        }
HtmlElementCollection hc=webBrowser1.Document.GetElementsByTagName(“a”);
对于(int i=0;i
我找到的解决方案是将“链接获取代码”放在单独的方法中,并在主线程(运行浏览器的地方)上调用该方法


BeginInvoke(新方法调用程序(委托(){getUsers(webBrowser1,链接列表);}))

“指定的强制转换无效”不太可能与线程有关,除非线程将事情搞得一团糟。它表明在
wb.Document.Links
中有一些东西不是
HtmlElement
。顺便问一下,这是哪个Web浏览器控件?Silverlight版本?在主线程上运行相同的精确方法工作得很好,而线程导航=新线程(()=>navigateTo(webBrowser1));navigate.Start();变量失败。强烈建议:在您更好地理解它之前,避免使用多线程。或者,尝试将
wb.Document.Links
传递到此线程,而不是允许它从另一个线程非法访问web浏览器。您从哪里获得它?链接列表。添加??PS链接不必具有名为href的属性,最好在调用.Contains之前检查该属性是否为null