所有线程完成执行后如何确保语句执行

时间:2013-10-12 13:10:48

标签: c# .net multithreading

说我的主线程调用一个循环来创建新线程并在其他函数上启动它们。

for (int i = 0; i < numberOfThreads; i++)
{
        Thread thread = new Thread(start);
        thread.Start();
}
call_This_Function_After_All_Threads_Have_Completed_Execution();

如何确保只在所有其他线程完成执行后才调用我的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用AutoResetEvent-s。声明一个AutoResetEvent数组,其中所有线程都可以到达它。

AutoResetEvent[] events = new AutoResetEvent[numberOfThreads];

启动这样的线程:

for (int i = 0; i < numberOfThreads; i++)
{
    events[i] = new AutoResetEvent(false);
    Thread thread = new Thread(start);
    thread.Start(i);
}
WaitHandle.WaitAll(events);
call_This_Function_After_All_Threads_Have_Completed_Execution();

最后不要忘记在线程中调用Set()方法:

 void start(object i)
 {
       //... do work
       events[(int) i].Set();
 }