如何使用 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 for Excel

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

来自 .NET 中的并行编程博客:

.NET 2.0 引入了泛型,以允许增强代码可重用性和 类型安全。 从那时起,泛型集合(IEnumerable, 列表、词典等)已成为标准,推荐使用 超过它们的非通用对应项(IEnumerable,ArrayList, 哈希表等)。 因此,Parallel.ForEach 仅支持泛型 集合,因此如下所示的代码将无法编译。

有一种解决方法,使用博客中提到的IEnumerable.Cast

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

虽然这将编译,但它不适用于Excel.Range因为它具有线程相关性,并且只能通过 STA 线程工作,因为它正在执行 COM 互操作。