首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# HTMLElementCollection throws

C# HTMLElementCollection throws
EN

Stack Overflow用户
提问于 2013-04-24 07:05:36
回答 4查看 1.5K关注 0票数 1

编辑:这个问题的一部分已经在其他地方得到了回答,但是我觉得这个线程提供了一些更多的信息,并且可能很方便地了解

标题几乎说明了一切,但这里有一些更多的信息:

我有一个函数,它使用全局HTMLdocument对象的WebbBowser来搜索特定的对象(即文本框)。当找到对象时,它将被赋予一个值。

该函数如下所示:

代码语言:javascript
复制
    public static void Set_Elements_Input(string element_name, string value)
    {
        HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");

        foreach (HtmlElement he in hec)
        {
            if (he.GetAttribute("name") == element_name)
            {
                he.SetAttribute("value", value);
            }
        }
    }

由于环境原因,我无法在编程环境中进行调试。因此,我必须运行生成的.exe来查看它是否有效。事实并非如此。

我的程序崩溃,而崩溃报告指出,崩溃是由一个InvalidcastException造成的。

在MessageBox.Show()方法的帮助下,我设法找到了每件事都变得疯狂的地方:

代码语言:javascript
复制
       MessageBox.Show("I got here!");
       HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");
       MessageBox.Show("I didn't get here!");

这让我觉得很奇怪,因为我看不出这怎么会抛出一个InvalidCastException。我知道foreach使用强制转换,但我的程序似乎从未达到该代码。这一点,而且HTMLElementCollection是HTMLElements的集合,所以我看不出这将如何处理InvalidCastException。也许当集合是空的时,但我认为有一个不同的例外。

这可能是因为我正在使用线程,而且我必须使用调用。但是http://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelementcollection.aspx说HtmlElementCollections是线程安全的(或者与此无关?)这个函数是静态的,所以我甚至不确定是否可以调用。

长话短说,怎么回事?我怎么才能修好它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-24 07:19:52

也许在这里找到了Threading and webbrowser control

代码语言:javascript
复制
_wb.Invoke(new Action(() => {

    HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");

    foreach (HtmlElement he in hec)
    {
        if (he.GetAttribute("name") == element_name)
        {
            he.SetAttribute("value", value);
        }
    }
 }
票数 1
EN

Stack Overflow用户

发布于 2013-04-24 07:21:25

我认为您正在尝试将HTMLElement转换为集合。只是猜一下。你不妨试着

代码语言:javascript
复制
HtmlElement hec = _wb.Document.GetElementsByTagName("input");
票数 0
EN

Stack Overflow用户

发布于 2013-04-24 07:21:34

我认为这是你的foreach造成的。foreach不得不在IEnumerable上工作。如果var是由集合实现的,则在foreach中使用IEnumerable<T>的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16185499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档