C# 并行。将值插入excel

C# 并行。将值插入excel,c#,C#,我最近优化了我的函数,它使用Parallel For循环将一些值插入excel工作簿(我必须比较循环中的大约500000个值)。若我使用simple for loop,一切都会对我有好处,但若我开始使用Parallel for语句,我并没有错误,代码也可以正常工作,但在excel工作簿中插入的值并不像预期的那个样(在不同的行中,不像我使用simple for loop时那个样) 这是我的代码示例,你能帮我找到解决方案吗 Parallel.For(0, DestinationListIDArray

我最近优化了我的函数,它使用Parallel For循环将一些值插入excel工作簿(我必须比较循环中的大约500000个值)。若我使用simple for loop,一切都会对我有好处,但若我开始使用Parallel for语句,我并没有错误,代码也可以正常工作,但在excel工作簿中插入的值并不像预期的那个样(在不同的行中,不像我使用simple for loop时那个样)

这是我的代码示例,你能帮我找到解决方案吗

Parallel.For(0, DestinationListIDArray.Count, (int i) =>
                {
                    for (int j = 0; j < SourceListIDArray.Count; j++)
                    {
                        if (DestinationListIDArray[i].ToString() == SourceListIDArray[j].ToString() && DestinationListIDArray[i].ToString() != "НД")
                        {
                            int c = 1;
                            int summ = i + c;
                            string forB = summ.ToString();
                            string forC = summ.ToString();
                            DestrangeH = myExcelWorksheetDestination.get_Range(TEXTBOX_FIO_DESTINATION.Text + forB);
                            DestrangeI = myExcelWorksheetDestination.get_Range(TEXTBOX_DEST_DOLZHNOST.Text + forC);


                            DestrangeH.Interior.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF1_BACKGROUNDCOLOR.Color);
                            DestrangeH.Font.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF1_FOREGROUNDCOLOR.Color);
                            DestrangeI.Interior.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF2_BACKGROUNDCOLOR.Color);
                            DestrangeI.Font.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF2_FOREGROUNDCOLOR.Color);

                            //DestrangeH.set_Value(Missing.Value, SourceArray[j - 2].ToString());
                            //DestrangeI.set_Value(Missing.Value, SourceArray[j - 1].ToString());

                            DestrangeH.set_Value(Missing.Value, SourceListFIOArray[j].ToString());
                            DestrangeI.set_Value(Missing.Value, SourceListDolzhArray[j].ToString());

                        }

                    }


                });
Parallel.For(0,destinationListDarray.Count,(int i)=>
{
for(int j=0;j

我正在使用一个列表数组,我在某处读到列表泛型不是线程安全的,可能是它让我陷入了麻烦。如果是这样的话,请告诉我使用什么样的dinamic阵列以及如何在插入前锁定。谢谢..

正如我回忆的那样。请看这里:

TL;博士

Office对象模型不是线程安全的。在某些情况下,您可以使用多个线程,但是COM服务器会为您序列化调用


你不能从使用Paraller中获得任何东西。在这里。

正如我回忆的那样。请看这里:

TL;博士

Office对象模型不是线程安全的。在某些情况下,您可以使用多个线程,但是COM服务器会为您序列化调用


您无法从使用Paraller.For here中获得任何好处。

我认为Excel COM API不是线程安全的。即使是这样,您也在与单个excel实例交谈,该实例必须序列化它,从而使并行变得不必要。您的意思是我根本无法使用excel的并行?抱歉,我不这么认为。我不认为excel COM API是线程安全的。即使是这样,您正在与一个excel实例交谈,该实例必须序列化它,从而使并行变得不必要。您的意思是我根本无法使用excel的并行?对不起,我不这么认为。谢谢您的时间!我已经阅读了上面的链接,我想我没有一个适合我的场景的合适的解决方案。谢谢你的时间!我已经阅读了上面的链接,我认为我没有一个适合我的场景的合适的解决方案。