Например, пытаюсь сделать расчеты над элементами коллекции параллельно. Обращаюсь к структурам типа Point2d - проблем нет. Результаты складываю в ConcurrentBag. Все прекрасно работает. НО хочу добавить индикатор прогресса и возможность прервать процесс по Esc. Использую LongOperationManager как учил
великий Ленин Киан. Оно тоже прекрасно работало, пока не распараллелил.
ConcurrentBag<PSegmentColl> inL = new ConcurrentBag<PSegmentColl>();
ConcurrentBag<PSegmentColl> outL = new ConcurrentBag<PSegmentColl>();
ConcurrentBag<PSegment> free = new ConcurrentBag<PSegment>();
using (LongOperationManager lom = new LongOperationManager("Идет обработка", knots.Count)) // Индикатор прогресса (обертка для MeterProgress) https://www.keanw.com/2007/08/a-handy-net-cla.html
{
Parallel.ForEach(knots, col => Working2d(col, tol, ref inL, ref outL, ref free, ref loopCount));
// не важно что там внутри Working2d - оно работает, раскидывает элементы списка по другим спискам как мне надо
}
Есть ли способ обратиться к lom.Tick(), так чтоб Автокад не вышибло?
await - это вообще выше моего понимания. Ниасилил
А вот заменить foreach на параллельный - это выглядит очень соблазнительно. Как увидел такую фичу - сразу загорелся.