如何使用Parallel.ForEach for Excel?

时间:2014-12-22 06:27:24

标签: c# .net excel parallel.foreach

我正在尝试使用Parallel.ForEach for Excel但我收到错误。代码是

using System.Threading.Tasks;
using Excel = Microsoft.Office.Interop.Excel;

public void function(Excel.Range range)
{
    Parallel.ForEach(range, item=>
    {
        //do stuff
    });
}

错误是错误7:方法的类型参数' System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable,System.Action)'无法从使用中推断出来。尝试明确指定类型参数。

如果您有任何想法,我将非常感激。

1 个答案:

答案 0 :(得分:3)

您看到的错误是因为非通用集合不支持Parallel.ForEach

来自Parallel Programming in .NET blog

  

.NET 2.0引入了泛型,以增强代码的可重用性   类型安全。从那时起,通用集合(IEnumerable,   列表,字典等)已成为标准并被推荐   他们的非泛型对应物(IEnumerable,ArrayList,   HashTable等)。 因此,Parallel.ForEach仅支持泛型   集合,因此以下代码将无法编译。

有一种解决方法,正如他们在博客中提到的那样使用IEnumerable.Cast

Parallel.ForEach(r.Cast<object>(), _ =>
{
    // Do stuff
});

虽然这将编译,但无效Excel.Range,因为它具有线程关联性,并且只能通过STA线程工作,因为它正在做COM互操作。