使用ThreadPool实现多线程执行
class Program
{
static void Main(string[] args)
{
List<BaseWorker> list = new List<BaseWorker>();
BaseWorker worker = null;
for (int i = 0; i < 100; i++)
{
worker = new BaseWorker(i.ToString());
list.Add(worker);
}
ParallelProcessor.ExecuteParallel(list.ToArray());
Console.WriteLine("---end");
Console.Read();
}
}
interface IParallelWorker
{
void Run();
}
internal class BaseWorker : IParallelWorker
{
private string _flag;
public BaseWorker(string flag)
{
_flag = flag;
}
public void Run()
{
Console.WriteLine(_flag+" Start");
Console.WriteLine(_flag + " End" );
}
}
internal class ParallelProcessor
{
public static void ExecuteParallel(IParallelWorker[] methods)
{
int account = methods.Length;
if (methods.Length > 0)
{
// Initialize the reset events to keep track of completed threads
ManualResetEvent reset=new ManualResetEvent(false);
// Launch each method in it's own thread
for (int i = 0; i < methods.Length; i++)
{
//resetEvents[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object index)
{
try
{
int methodIndex = (int)index;
// Execute the method
methods[methodIndex].Run();
}
catch (Exception)
{
}
finally
{
if (Interlocked.Decrement(ref account) == 0)
{
// Tell the calling thread that we're done
reset.Set();
}
}
}), i);
}
// Wait for all threads to execute
reset.WaitOne();
}
}
}