最近、Parallel For ループを使用して Excel ワークブックにいくつかの値を挿入する関数を最適化しました (ループ内で約 500000 の値を比較する必要があります)。単純な for ループを使用するとすべてがうまく機能しますが、Parallel For ステートメントを使用し始めると、間違いはなく、コードは正常に動作しますが、値が Excel ワークブックに期待どおりに挿入されません (別の行で、i の場合とは異なります)。単純な for ループを使用します)。
これは私のコード サンプルです。解決策を見つけるために、助けていただけますか。
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());
}
}
});
私はリスト配列を使用していますが、リストジェネリックはスレッドセーフではないことをどこかで読みました。問題が発生する可能性があります。もしそうなら、どの種類の動的配列を使用するか、挿入前にロックする方法を教えてください。ありがとう..