我正在尝试使用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)'无法从使用中推断出来。尝试明确指定类型参数。
如果您有任何想法,我将非常感激。
答案 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互操作。