ПОЗДРАВЛЯЕМ, вы были моим 1000-м ответом
когда я должен использовать параллельный foreach и когда я должен использовать параллельный
LINQ?
Они оба делают одно и то же, они оба построены на параллельной библиотеке задач и отличаются только семантикой.
Посмотрите на все перегрузки и методы расширения, и вы увидите, что иногда просто написать PLinq , иногда легче написать Parallel.For/Foreach
Что касается вашей проблемы, то это не имеет ничего общего ни с одним из подходов напрямую. Однако вы ARE пытаетесь обновить UI из потенциально другого потока и, скорее всего, не сможете.
Единственная причина, по которой этот не потерпит неудачу , заключается в том, что внутреннее устройство сочло это не пригодным для потоков и запускает его в исходном контексте.
Я думаю, вам действительно нужно переосмыслить свой подход, и если вы хотите использовать несколько потоков, вам нужно будет Marshal вернуться к UI Thread соответственно
Но когда я запускаю тестовые случаи nunit, он не работает
Что касается ваших тестовых случаев ... Я думаю, что у вас есть большие проблемы в данный момент, ваш код не является потокобезопасным