假设我的主线程调用了一个循环,该循环创建了新线程并在其他一些函数上启动它们。
for (int i = 0; i < numberOfThreads; i++)
{
Thread thread = new Thread(start);
thread.Start();
}
call_This_Function_After_All_Threads_Have_Completed_Execution();
我如何确保只有在所有其他线程完成执行后才调用我的方法。
假设我的主线程调用了一个循环,该循环创建了新线程并在其他一些函数上启动它们。
for (int i = 0; i < numberOfThreads; i++)
{
Thread thread = new Thread(start);
thread.Start();
}
call_This_Function_After_All_Threads_Have_Completed_Execution();
我如何确保只有在所有其他线程完成执行后才调用我的方法。
您可以使用 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();
}