C# IHTMlementCollection&xB4;在循环过程中s的长度会发生变化
我有一段代码,它在元素的节点上循环:C# IHTMlementCollection&xB4;在循环过程中s的长度会发生变化,c#,browser,mshtml,C#,Browser,Mshtml,我有一段代码,它在元素的节点上循环: public static IEnumerable<IHTMLDOMNode> AllElements(this IHTMLDOMNode node) { if (node.IsHTMLElement()) { IHTMLElement element = (IHTMLElement)node; IHTMLElementCollection collection = element.all;
public static IEnumerable<IHTMLDOMNode> AllElements(this IHTMLDOMNode node)
{
if (node.IsHTMLElement())
{
IHTMLElement element = (IHTMLElement)node;
IHTMLElementCollection collection = element.all;
int length = collection.length;
for (var i = 0; i < length; i++)
{
IHTMLDOMNode item = collection.item(i);
yield return item;
}
}
}
公共静态IEnumerable等位基因(此IHTMLDOMNode)
{
if(node.ishtmlement())
{
IHTMlement元素=(IHTMlement)节点;
IHTMLElementCollection集合=element.all;
int length=collection.length;
对于(变量i=0;i
我的问题是,有时,集合的长度会在循环过程中发生变化。我在收益返回项上设置了一个断点当项
为空时,代码>将中断,并注意到当它停止时(因此项
为空
),我的长度
变量为815,集合。长度
为814,我
为814,因此它试图获取超出范围的项
我知道我可能会将collection.length
放入循环中,但我担心这可能无法解决问题的根源。这有可能吗?页面中的脚本是否可能在“我的循环”运行的同时运行,而该脚本将删除其中的元素?或者还有什么可能导致集合的长度发生更改?是否有单独的线程正在修改集合?或者在检索原始枚举数后是否要更改它?如果您这样做:
var all = node.AllElements();
node.removeChild(child);
all.moveNext();
你会遇到问题。
< P>数据是实况,并且可以在循环中间被垃圾收集。在循环后对数据调用GC.KeepAlive应该允许它保持可用。没有单独的线程。这是一个单线程应用程序。