I ont ce code qui passe en boucle sur les nœuds d'un élément:changements de longueur IHTMLElementCollection's pendant la boucle
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;
}
}
}
Mon problème est que parfois, la longueur de la collection changera au cours de la mise en boucle. Je mis un point d'arrêt à yield return item;
qui briserait chaque fois item
est nulle, et remarqué quand il a cessé (et donc item
était null
) que ma variable length
était 815, collection.length
était 814 et i
était 814 il essayait d'obtenir un article en dehors de la gamme.
Je sais que je pourrais probablement mettre collection.length
à l'intérieur de la boucle mais j'ai peur que cela ne résolve pas la racine du problème. Est-ce censé être possible? Est-il possible qu'un script de la page s'exécute en même temps que ma boucle qui serait le script qui supprime un élément à l'intérieur? Ou quoi d'autre pourrait faire changer la longueur de la collection?
Il n'y a pas de thread séparé. Ceci est une application à un seul thread. – Juan