我嘗試使用多線程處理一些數據,我使用線程池生成的線程數量等於核心數量(限於.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");
}
速度是最重要的,我如果跨線程調用佔用最小的時間,所以會是非常有益的。 謝謝
「使用線程池生成等於內核數量的線程」 - 很少有人明確需要自行優化線程數。線程池是爲你設計的。 –