如何使用 Parallel.ForEach for Excel
本文关键字:for Excel ForEach Parallel 何使用 | 更新日期: 2023-09-27 18:35:06
我正在尝试使用 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)"的类型参数无法从用法中推断出来。尝试显式指定类型参数。
如果您有任何想法,我将不胜感激。
您看到的错误是因为非泛型集合不支持Parallel.ForEach
。
来自 .NET 中的并行编程博客:
.NET 2.0 引入了泛型,以允许增强代码可重用性和 类型安全。 从那时起,泛型集合(IEnumerable, 列表、词典等)已成为标准,推荐使用 超过它们的非通用对应项(IEnumerable,ArrayList, 哈希表等)。 因此,Parallel.ForEach 仅支持泛型 集合,因此如下所示的代码将无法编译。
有一种解决方法,使用博客中提到的IEnumerable.Cast
:
Parallel.ForEach(r.Cast<object>(), _ =>
{
// Do stuff
});
虽然这将编译,但它不适用于Excel.Range
因为它具有线程相关性,并且只能通过 STA 线程工作,因为它正在执行 COM 互操作。