установить приоритет для цикла Parallel.For

Хорошо здесьВ этой ситуации: мой основной поток / поток пользовательского интерфейса (назовите его Thread1) используется для получения пакета изображений из сканера документов. Когда партия была приобретена, отдельный "фон" поток (назовите его Thread2) запускается для обработки и сохранения изображений из этого пакета.

Тема 2 ("фон" нить) используетParallel.For цикл, который уменьшает время обработки / сохранения изображения на 70% по сравнению с обычнымFor петля. Тем не менее, это также, похоже, максимизирует все мои процессоры, так что Thread1 не может начать получать больше изображений, покаParallel.For цикл завершается.

Есть ли способпределParallel.For Цикл, чтобы он не максимально использовать мои процессоры? Или установить приоритет обработки? Я пробовал настройкуThread2.Priority = ThreadPriority.Lowest, но это не влияет на цикл. Или я неправильно понимаю, какParallel.For петля работает? Это как-то блокирует Thread1?

Вот как я вызываю Thread2 из метода в 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
}

Вот мойThreadWork метод:

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
}

Ответы на вопрос(5)

Ваш ответ на вопрос