今回はC#のWaitOne()でスレッドを停止させて動きを確かめてみたいと思う。
まずは以下のWaitOne()が含まれるソースを実行してみる。今回のプログラムではメインスレッドとサブスレッドが並列で処理されるようになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Threading; using System.Threading.Tasks; namespace csharp_Thread_WaitOne { class Program { static void Main(string[] args) { Console.WriteLine("Main Thread Start"); var waitHandle = new ManualResetEvent(false); Task.Factory.StartNew(() => { Console.WriteLine("Sub Thread Start"); Thread.Sleep(2000); //2秒間サブスレッドを停止させる Console.WriteLine("Sub Thread End"); waitHandle.Set(); }); Console.WriteLine("Main Thread Wait"); //waitHandle.WaitOne(Timeout.Infinite); //Set()が呼ばれるまでずっと待つ waitHandle.WaitOne(3000); //3秒待ち、待ってる間にSet()が呼ばれたら再開する Console.WriteLine("Main Thread Start"); Console.WriteLine("Press any key to exit."); Console.Read(); } } } |
動きはコメントにある通りとなっている。WaitOneはSet()が呼ばれるまで待機する動きとなる。
結果はこちら。