2014-12-22 3 views
1

Excel 용 Parallel.ForEach를 사용하려고하는데 오류가 발생합니다. 코드는Parallel.ForEach for Excel을 어떻게 사용할 수 있습니까?

오류 오류 7
using System.Threading.Tasks; 
using Excel = Microsoft.Office.Interop.Excel; 

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

: 메소드의 형태 인수 'System.Threading.Tasks.Parallel.ForEach (System.Collections.Generic.IEnumerable, System.Action가)'는 추론 할 수 없습니다 용법. 형식 인수를 명시 적으로 지정하십시오.

혹시 알려 주시면 감사하겠습니다.

+1

Excel을 여러 스레드에서 사용할 생각은 없습니다. Excel은 단일 스레드 (COM STA)이므로 모든 호출이 어쨌든 동일한 스레드에 정렬됩니다. – adrianm

+0

@adrianm, 그 대답으로 변환하는 것이 좋습니다. –

답변

3

표시되지 않는 오류는 Parallel.ForEach이 제네릭이 아닌 컬렉션에서 지원되지 않기 때문입니다. Parallel Programming in .NET blog에서

:

.NET 2.0 도입 제네릭 향상된 코드 재사용 및 유형의 안전을 허용합니다. 그 이후로 제네릭 컬렉션 (IEnumerable, 목록, 사전 등)이 표준이되어 일반용 (IEnumerable, ArrayList, HashTable 등)에 대해 을 권장합니다. 결과적으로 Parallel.ForEach는 콜렉션 만 지원하므로 다음과 같은 코드는 컴파일되지 않습니다. 이 를 컴파일하지만이 스레드 선호도를 가지고 있으며, 단지 바와 같이

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

, 그것은 Excel.Range 작동하지 않습니다 : 그들은 블로그에서 언급으로

IEnumerable.Cast를 사용하여 해결 방법은 COM interop을 수행하면서 STA 스레드를 통해 작업합니다.

관련 문제