Я пытаюсь обработать некоторые данные, используя многопоточность, где я использую пул потоков, чтобы генерировать потоки, равные количеству ядер (ограничено .NET 2.0 до 3.5, поэтому я не могу использовать TPL).
Все мои потоки выполняют одну и ту же функцию, работая в разных частях моих данных.
Моя проблема в том, что я не могу обновить индикатор выполнения из потоков пула потоков. Найдены такие решения, как invoke и Background worker, но я не могу понять, как их использовать, помогите мне, как их использовать.
мой код выглядит как
private static float[] inpdat=new float[1000];//The input array to process
//The spawned threads
public void dowork(object o)
{
int np = (int)o;
for(int i=np;i<inpdat.length;i=i+Environment.ProcessorCount)
{
//do some processing
if(np==0)
{
//update progress bar here
}
}
}
//The main thread
for (int npou = 0; npou < numproc; npou++)
{
resetEvents[npou] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(dowork), npou);
PetrelLogger.InfoOutputWindow("manual reset event set");
}
Скорость имеет для меня первостепенное значение, поэтому было бы очень полезно, если бы вызов с несколькими потоками занимал минимальное время.
Спасибо