如何并行循环xml节点

时间:2012-07-07 14:59:43

标签: c# winforms parallel-processing

我有以下代码:

foreach (XmlNode xn in xnList)
{
 String NAME = xn["name"].InnerText;
}

我想并行启动每个循环。我怎样才能做到这一点?我认为我可以使用以下方法,但我无法弄清楚如何使其工作:

        ParallelOptions parOptions = new ParallelOptions();
        parOptions.MaxDegreeOfParallelism = 4; //only up to 5 threads allowed.
        Parallel.ForEach(xnList.AsEnumerable(), parOptions, xn=>
        { 
         String NAME = xn["name"].InnerText;
        }

3 个答案:

答案 0 :(得分:2)

我提出了这个解决方案:

        var parallelLoop1 = xnList.Count;
        Parallel.For(0, parallelLoop1, index =>
        {
         String NAME = xnList[index]["name"].InnerText;
        }

答案 1 :(得分:2)

您尝试的操作如下:

Parallel.ForEach(xnList.AsEnumerable(),
                 item=>{String NAME = item["name"].InnerText;});

但是如果您使用winform并且想要执行某些进程并防止等待光标,则这是另一个问题。

答案 2 :(得分:1)

我发现下面的链接允许你在非通用集合(如XmlNodeList)上并行执行foreach。

// Process the results in parallel
Parallel.ForEach(nodes.Cast<XmlNode>(), options, (thenode) =>
{
    // do stuff
});

Details of parallel foreach over non-generic collections