<C#>スレッドが終了するまで待つ
スレッドの終了の待ち方を3種類試してみました。
Application.DoEvents()は使わないほうが良いと書いてあるページが多いのですが、フォームが固まってしまってダメです。
とりあえずApplication.DoEvents()を使っちゃえ(笑)
(1)Task.WaitAll() メソッドでスレッドが終了するのを待つ
// ↓フォームが固まる Console.WriteLine("(1)開始:" + DateTime.Now.ToString("HH:mm:ss")); Task th1 = Task.Factory.StartNew(() => Thread1()); Task th2 = Task.Factory.StartNew(() => Thread2()); Task.WaitAll(th1, th2); Console.WriteLine("(1)終了:" + DateTime.Now.ToString("HH:mm:ss"));
(2)Thread.Join() メソッドでスレッドが終了するのを待つ
// ↓フォームが固まる Console.WriteLine("(2)開始:" + DateTime.Now.ToString("HH:mm:ss")); Thread th3 = new Thread(new ThreadStart(Thread2)); th3.Start(); th3.Join(); Console.WriteLine("(2)終了:" + DateTime.Now.ToString("HH:mm:ss"));
(3)th4.IsAliveでスレッドが終了するのを待つ
// ↓フォームは固まらない Console.WriteLine("(3)開始:" + DateTime.Now.ToString("HH:mm:ss")); Thread th4 = new Thread(new ThreadStart(Thread2)); th4.Start(); while (th4.IsAlive) { Application.DoEvents(); } Console.WriteLine("(3)終了:" + DateTime.Now.ToString("HH:mm:ss"));
Thread1とThread2は、とりあえずこんな感じ。
private void Thread1() { Thread.Sleep(5000); } private void Thread2() { Thread.Sleep(6000); }
ご使用に関しては自己責任でよろしくお願い申し上げます。
2020年12月にpaizaラーニングでC#を受講しました。
コメントでアドバイスをいただけると幸いです。
↓ほしい物リスト↓