我尝试使用多线程处理一些数据,我使用线程池生成的线程数量等于核心数量(限于.NET 2.0至3.5,因此无法使用TPL)。从线程池c更新进度条#
我的所有线程执行相同的功能,在我的数据的不同部分操作。
我的问题是我无法从线程池的线程更新进度条。找到解决方案,如调用和后台工作人员,但不能真正了解如何使用它们,请帮助我如何使用它们。
我的代码看起来像
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");
}
速度是最重要的,我如果跨线程调用占用最小的时间,所以会是非常有益的。 谢谢
“使用线程池生成等于内核数量的线程” - 很少有人明确需要自行优化线程数。线程池是为你设计的。 –