Parallel.For - обработать массив - неправильные индексы - C#

Узнай цену своей работы

Формулировка задачи:

У меня есть список objClass.listRect. В элементе списка objClass.listRect хранятся координаты области, в которой находится объект. Мне нужно выделить каждый объект и провести с ним некоторые манипуляции. Я делаю следующим образом:
Листинг программы
  1. List<int> array1 = new List<int>();
  2. for (int i = 0; i < iTotalCountInParallel; i++)
  3. {
  4.  
  5. int iCycle = -1;
  6. Parallel.For(0, iCoresCount, parOps, a =>
  7. {
  8. iCycle++;
  9. objClass.allObjects.Add(new OneObject(src, objClass.imgBinarized, objClass.listRect[a*i+a]));
  10. array1.Add(a * i + a);
  11. });
  12. }
  13.  
  14. //для оставшихся элементов
  15. int iOstatok = objClass.listRect.Count - iCoresCount * iTotalCountInParallel;
  16. Parallel.For(0, iOstatok, parOps, a =>
  17. {
  18. objClass.allObjects.Add(new OneObject(src, objClass.imgBinarized, objClass.listRect[a * iTotalCountInParallel + a]));
  19. array1.Add(a * iTotalCountInParallel + a);
  20. });
  21. //сохранение
  22. if (checkBoxSeveResults.Checked)
  23. {
  24. for (int i = 0; i < objClass.listRect.Count; i++)
  25. {
  26. MyFilesWork.Save_jpg(i, textBoxWorkFolder.Text, objClass.allObjects[i].imgObject, objClass.allObjects[i].imgSegmentedObject);
  27. }
  28. }
  29. richTextBox1.Text = "";
  30. foreach (int v in array1)
  31. {
  32. richTextBox1.Text += v.ToString() + ";";
  33. }
в результате при выводе обнаруживается что некоторые одни и те же объекты были по 2-3 раза обработаны, а некоторые наоборот, обработаны не были. Вывод - проблема с индексами. Проблема здесь objClass.listRect[a*i+a]) и здесь [a * iTotalCountInParallel + a] не все объекты обрабатываются. Не могу понять, почему проблема с индексами. Нужно чтобы все учитывались. из указанного списка. Для того чтобы окончательно убедиться что проблема именно с индексами, я все индексы сохранил в List<> и вывел их и вот результат: 1;2;4;11;8;7;3;0;9;10;6;5;2;14;4;22;20;8;10;0;18;12;6;16;33;12;27;21;15;30;3;0;9;6;24;18;20;4;16;28;8;36;44;32;0;24;12;4 0;15;0;10;5; Проблема с индексами. Что я делаю не так?

Решение задачи: «Parallel.For - обработать массив - неправильные индексы»

textual
Листинг программы
  1.  private void ProcessSingleObject(int index)
  2.         {
  3.             objClass.allObjects.Add(new OneObject(src, objClass.imgBinarized, objClass.listRect[index]));
  4.             if (checkBoxSeveResults.Checked)
  5.             {
  6.                 MyFilesWork.Save_jpg(index, textBoxWorkFolder.Text, objClass.allObjects[index].imgObject, objClass.allObjects[index].imgSegmentedObject);
  7.             }
  8.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы