日期:2014-05-18  浏览次数:20821 次

请问在C#下多线程的问题
问题:   我现在有一   100条任务要处理,

调用多线程操作,有什么办法限制   同时处理为   10   个线程,别的线程都为等待.

我现在是
用   muxConsole.WaitOne();     //阻塞队列   好像不行

------解决方案--------------------
我恰好有个类似的代码。
思路是先在ThreadPool中放入10个线程,然后等待其中的任何一个执行结束WaitHandle.WaitAny(),WaitOne的返回值正好是ManualResetEvent数组的下标,再补充另一个待执行的线程进入ThreadPool Queue,最后用WaitHandle.WaitAll()等着剩下所有的线程执行结束。
// Append maxEventCount threads
for (int b = 0; b < maxEventCount; b++)
{
string s = string.Format( "{0}.{1}.{2}.{3} ", ipBits[0], ipBits[1], ipBits[2], b);
mrEvents[b] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(MultiThreadTryIp, new State(s, mrEvents[b]) as object);
}
int ipAddCount = maxEventCount;
while (ipAddCount <= byte.MaxValue)
{
int appendTo = WaitHandle.WaitAny(mrEvents);
string s = string.Format( "{0}.{1}.{2}.{3} ", ipBits[0], ipBits[1], ipBits[2], ipAddCount);
ipAddCount++;

//System.Diagnostics.Debug.WriteLine(s);
// ShowFreeThread();

mrEvents[appendTo] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(MultiThreadTryIp, new State(s, mrEvents[appendTo]) as object);
}
WaitHandle.WaitAll(mrEvents);