definir prioridade para Parallel.For loop

Ok, aqui está a situação: Meu thread principal / UI (chame-o Thread1) é usado para adquirir um lote de imagens de um scanner de documentos phsycial. Quando um lote tiver sido adquirido, um thread de "segundo plano" separado (chame-o de Thread2) será iniciado para processar e salvar as imagens desse lote.

Thread2 (o thread "background") está usando umParallel.For loop que reduz o tempo de processamento / economia de imagem em 70% em relação a umFor loop. No entanto, ele também parece estar maximizando todos os meus processadores para que Thread1 não possa começar a adquirir mais nenhuma imagem até que oParallel.For loop completo.

Existe uma maneira de "limitar" umParallel.For loop para que não ultrapasse os meus processadores? Ou para definir a prioridade de processamento? Eu tentei definirThread2.Priority = ThreadPriority.Lowest, mas isso não parece afetar o loop. Ou eu estou entendendo mal comoParallel.For loop funciona? Está bloqueando o Thread1 de alguma forma?

Aqui está como eu chamo o Thread2 de um método no Thread1.

public void SaveWithSettings(bool save) // method in Thread1
{
    ....
    Thread thr = new Thread(ThreadWork); // creating new thread (Thread 2)
    thr.Priority = ThreadPriority.Lowest; // does nothing?
    thr.Start(new SaveContainer(sc)); // pass a copy as paramater

    // misc stuff to make scanning possible again
    numBgw++;
    twain.RemoveAllImages(); // clear images
    imagelist.Clear(); // clear imagelist images
    .... // etc. this all appears to process fine while Thread2 is processing
}

Aqui está o meuThreadWork método:

private void ThreadWork(object data) // executing in Thread2
{
    SaveContainer sc = data as SaveContainer; // holds images

    bool[] blankIndex = new bool[sc.imagelist.Count]; // to use in Parallel.For loop
    for (int i = 0; i < sc.imagelist.Count; i++)
        blankIndex[i] = false; // set default value to false (not blank)

    Parallel.For(0, sc.imagelist.Count, i => // loop to mark blank images
    {
        bool x = false; // local vars make loop more efficient
        x = sc.IsBlankImage((short)i); // check if image at index i is blank
        blankIndex[i] = x; // set if image is blank
    }
    .... // other image processing steps
}

questionAnswers(5)

yourAnswerToTheQuestion