我如何使用Parallel.ForEach for Excel?
我正在尝试使用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)'的types参数不能从用法推断。 尝试明确指定types参数。
如果您有任何想法,我将非常感激。
您看到的错误是因为Parallel.ForEach
在非generics集合上不受支持。
从.NET博客中的并行编程 :
.NET 2.0引入了generics以增强代码的可重用性和types安全性。 从那时起,generics集合(IEnumerable,List,Dictionary等)已经成为标准,并推荐在它们的非generics对象(IEnumerable,ArrayList,HashTable等)上。 因此,Parallel.ForEach仅支持generics集合 ,因此下面的代码将无法编译。
有一个解决方法,使用IEnumerable.Cast
他们在博客中提到:
Parallel.ForEach(r.Cast<object>(), _ => { // Do stuff });
虽然这会编译 ,但它不会与Excel.Range
工作 ,因为它具有线程关联性,并且只能通过STA线程工作,因为它正在执行COM互操作。