次のようにThread.Join()の公式ウェブサイトは説明しました:
https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.thread.join?view=netframework-4.8
このインスタンス内のスレッドが表す前に終了は、呼び出し元のスレッドをブロックします。
次のコードは、スレッド1が最初に実行されますが、スレッド2の実行が完了した後に、スレッド1続けるまでによるthread2.join()ブロックスレッドの実装に、スレッドが待機する必要があります。
それは次のとおりです。CurThreadスレッドがCalleeThreadスレッドがダウンし続ける前にCurThreadだけCalleeThread.Join()以降のコードの実行が終了するまでブロックされます前に、
使用してシステムを。 使用してSystem.Threadingを。 パブリック クラスの例 { 静的スレッドスレッド1、スレッド2。 公共の 静的な 無効メイン() { スレッド1 = 新しいスレッド(ThreadProc)。 thread1.Name = " スレッド1 " ; thread1.Start(); スレッド2 = 新しいスレッド(ThreadProc)。 thread2.Name = 「スレッド2 」。 thread2.Start(); } プライベート 静的 ボイドThreadProc() { Console.WriteLineを(" \ nCurrentスレッド:{0} " 、Thread.CurrentThread.Name)。 もし(Thread.CurrentThread.Name == " スレッド1 " && thread2.ThreadState!= ThreadState.Unstarted) thread2.Join(); Thread.sleep(4000 ); Console.WriteLineを(" \ nCurrentスレッド:{0} " 、Thread.CurrentThread.Name)。 Console.WriteLineを(" スレッド1:{0} " 、thread1.ThreadState)。 Console.WriteLineを("スレッド2:{0} \ n " ;、thread2.ThreadState) } } // :例では、次のような出力を表示 // 現在のスレッド:スレッド1 // // 現在のスレッド:スレッド2 // // 現在のスレッド:スレッド2 // スレッド1:WaitSleepJoin // スレッド2:実行 // // // スレッド1:現在のスレッド // スレッド1:実行 // スレッド2を:停止
こともでき、物品の説明があります: