0

私のメインスレッドが新しいスレッドを作成し、他の関数でそれらを開始するループを呼び出すとします。

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

他のすべてのスレッドの実行が完了した後にのみメソッドが呼び出されるようにするにはどうすればよいですか。

4

1 に答える 1

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();
 }
于 2013-10-12T13:27:49.030 に答える