2017-08-20 2 views
1

Ich versuche, die Zellen von SpreadSheetGear IworkBook zu lesen, es wird Ausnahme. Wird es erwartet?SpreadSheetGear IWorksheet Zellen lesen von mehreren Zellen werfen Ausnahme

for (int i = wr; j <= er; i++) { 
    for (int j = sc; j <= ec; j++) 
         { 

          var rng = worksheet.Range[i, j]; 
          var cellData = GetCell(rng, worksheet); 
          row.c.Add(cellData.Index, cellData); 
         } 
         } 

         void GetCell (SpreadsheetGear.IRange rng,SpreadsheetGear.IWorksheet worksheet) { 
         // CPU bound task 

         if (rng.Locked) 
        { 
         var locked = 1; 
        } 
         } 


=================== 

Parllelism Code 
Parallel.For (sr ,er+1 ,i => 
{ 
for (int j = sc; j <= ec; j++) 
        { 

         var rng = worksheet.Range[i, j]; 
         var cellData = GetCell(rng, worksheet); 
         row.c.Add(cellData.Index, cellData); 
        } 
        } 

        void GetCell (SpreadsheetGear.IRange rng,SpreadsheetGear.IWorksheet worksheet) { 
        // CPU bound task 

        if (rng.Locked) 
       { 
        var locked = 1; 
       } 
        } 

Ich versuche, die CPU gebunden Aufgabe, aber die es Wurf Ausnahme parallelisieren, wenn ich Parallelität unter Block Wurf Ausnahme

if (rng.Locked) 
        { 
         var locked = 1; 
        } 
         } 
+0

Sie müssen viel genauere Informationen bereitstellen, um hilfreiches Feedback zu erhalten. Bitte geben Sie weitere Details über den betroffenen Code, Zellwerte oder andere relevante Informationen über diese Zellen, die Ausnahme, die Sie bekommen, etc. –

+0

Ich habe meine Frage mit allen Details bearbeitet. Bitte schauen Sie – user1844634

Antwort

1

Ausnahmen für diese Art von Szenario zu verwenden versucht, zu erwarten, wie Sie kann diese Art von Arbeit in einer Arbeitsmappe nicht parallelisieren. Bei Ihrem parallelen Code greifen mehrere Threads gleichzeitig auf die Arbeitsmappe zu. Dies wird nicht unterstützt und führt schließlich zu einem unerwarteten/schlechten internen Status und schließlich zu der Ausnahme, die Sie sehen.

SpreadsheetGear unterstützt den Zugriff auf Arbeitsmappen aus mehreren Threads, aber dies ist mit einem großen Vorbehalt verbunden: Jeder Thread muss zwischen den Aufrufen von IWorkbookSet arbeiten. GetLock()/ReleaseLock(), die garantieren, dass jeweils nur ein Thread auf die Arbeitsmappe zugreift. Für Ihre Aufgabe der Parallelisierung der Arbeit tut Ihnen diese API also nicht gut, da die Verwendung von GetLock()/ReleaseLock() Ihre parallele Aufgabe effektiv in eine serielle zurückversetzt. Unter dem Strich gibt es keine Möglichkeit, diese Art von Aufgabe mit SpreadsheetGear sicher zu parallelisieren.

+0

Ich versuche nur von IRange zu lesen (Zelleigenschaften) Mehrfache Lesevorgänge werden auch nicht von Irange unterstützt? Wenn dies der Fall ist, Clone IRange-Objekt und lesen Sie die Eigenschaften aus dem geklonten Objekt. ist es möglich? – user1844634

+0

Ich bin mir nicht sicher, was Sie mit "multiple reads" auf einer IRange meinen, können Sie das näher erläutern? –

+0

Sorry nicht mehrere liest. Ich versuche gerade, Eigenschaften von IRange zu lesen. Lesen von mehreren Threads gleichzeitig auch nicht unterstützt? Wenn dies der Fall ist, Clone IRange-Objekt und lesen Sie die Eigenschaften aus dem geklonten Objekt. ist es möglich? – user1844634

Verwandte Themen