Закрывается программа при Parallel.For?
Скорей всего трапается в неуправляемом коде, который, вероятно, не поддерживает многопоточность. Можно попробовать поставить глобальный lock на вызов dllsub(), чтобы убедиться.
Стиль кода - отстой.
первое: никогда не используй класс рандома из нескольких потоков, он непотокобезопасный и иногда (на практике при высокой частоте генерации) экземпляр "ломается" и начинает всегда выдавать 0
второе: остается загадкой метод dllsub, project, поскольку они используют внешние переменные - это важно