1.有參無返回
2.等到所有線程都執(zhí)行完畢后,再執(zhí)行主線程
class Program
{
static List<ManualResetEvent> manualResetEvents = new List<ManualResetEvent>();
static void Main(string[] args)
{
try
{
ThreadPool.SetMinThreads(3, 3);
for (int i = 0; i < 10; i++)
{
Tesla tesla = new Tesla();
tesla.mre = new ManualResetEvent(false);
tesla.Model_S = "Model S " + i;
tesla.Model_3 = i;
tesla.Model_X = DateTime.Now;
if (i / 2 == 0)
{
tesla.Model_Y = true;
}
else
{
tesla.Model_Y = false;
}
manualResetEvents.Add(tesla.mre);// 這一步重要 一定需要將參數(shù)對象添加到List中,當方法執(zhí)行完成的時候會修改為true
ThreadPool.QueueUserWorkItem(BiliBili, tesla);// 將方法排入多線程隊列,線程可用時執(zhí)行
}
WaitHandle.WaitAll(manualResetEvents.ToArray());// 最多支持64線程
Console.WriteLine("結(jié)束了");
}
catch (Exception e)
{
Console.WriteLine("Error:" + e.Message);
}
finally
{
Console.ReadKey();
}
}
static void BiliBili(object obj)
{
Tesla tesla = obj as Tesla;
Console.WriteLine(tesla.Model_3 + " return:Model_S=" + tesla.Model_S + " Model_3=Model 3 " + tesla.Model_3 + " Model_X=" + tesla.Model_X + " Model_Y=" + tesla.Model_Y + " | 線程ID:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2500);
if (tesla.Model_3 / 2 == 0)
{
Thread.Sleep(5000);
//int d = 10 / tesla.Model_3;
}
tesla.mre.Set();//發(fā)送信號量 本線程執(zhí)行完畢 / 重要
}
}
public class Tesla
{
public ManualResetEvent mre;
public string Model_S { get; set; }
public int Model_3 { get; set; }
public DateTime Model_X { get; set; }
public bool Model_Y { get; set; }
}