方法挂起for循环,不能继续

本文关键字:不能 继续 循环 挂起 for 方法 | 更新日期: 2023-09-27 18:15:20

我正在使用html agility pack来解析我加载的几个文本文件。然后将解析出来的数据保存到字符串列表中以供进一步处理。但是,当我使用这个方法时,它永远不会碰到下面这行:

MessageBox.Show("test");

此外,如果我在该方法后面包含任何其他代码,则没有一个被触发。

有谁对我的错误有什么建议吗?

整个方法包括如下:

private void ParseOutput()
{
    nodeDupList = new List<string>();
    StreamWriter OurStream;
    OurStream = File.CreateText(dir + @"'CombinedPages.txt");
    OurStream.Close();
    for (int crawl = 1; crawl <= crawlPages.Length; crawl++)
    {
        var web = new HtmlWeb();
        var doc = web.Load(dir + @"'Pages" + crawl.ToString() + ".txt");
        var nodeCount = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[td/@class=""style_23""]");
        int nCount = nodeCount.Count;
        for (int a = 3; a <= nCount; a++)
        {
            var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]"); 
            foreach (HtmlNode node in specContent)
            {
                nodeDupList.Add(node.InnerText + ".d");
            }
        }
    }
    MessageBox.Show("test");
}

我已经创建了一个爬虫来保存多个html页面为文本,并使用此方法分别解析它们。我只是使用MessageBox来显示它不会继续跟随"for循环"。我在我的解决方案中调用了多个方法,它不会遍历它们。

该应用程序是一个针对。net Framework 4的Win Forms应用程序。

编辑:

谢谢你的帮助。

通过调试器重新运行后,我意识到它在循环中有时会崩溃

    for (int a = 3; a <= nCount; a++) 
    { 
        var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");  
        foreach (HtmlNode node in specContent) 
        { 
            nodeDupList.Add(node.InnerText + ".d"); 
        } 
    } 

当var specContent为空时。

没有异常产生;方法刚刚结束。

由于网站是动态的,我正在爬行,它很少返回null,但在几个实例中它有,这发生了

方法挂起for循环,不能继续

对于任何可能需要这个的人来说,解决方案是检查

for (int a = 3; a <= nCount; a++)  
{  
    var specContent = doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]/table[3]/tbody[1]/tr[" + a + @"]/td[3]/div[contains(@class,'style_24')]");
    if(specContent !=null) //added this check for null
    {
        foreach (HtmlNode node in specContent)  
        {  
            nodeDupList.Add(node.InnerText + ".d");  
        }
    }  
}

如果需要的话,我也可以使用try{} catch{}块来输出错误