今どきはC#ならasync/awaitが使えるのでThreadを使う機会は減ったけどやはり使う時は使うものである。たまにしか使わないと忘れるのでメモ。
(1) スレッドの起動
ThreadStartというデリゲートを使うのがポイント。というかC#の妙ちくりんなところ。短い処理であればラムダ式で書いた方が簡潔。
using System.Threading;
Thread threadHoge;
// スレッドの起動 threadHoge = new Thread(new ThreadStart(funcHoge)); threadHoge.Start();
private void funcHoge() { // スレッドの処理 }
(2) スレッドの終了待ち合わせ
// スレッドの終了待ち合わせ
threadHoge.Join();
(3) スレッドからUIを操作
メインスレッド(UIスレッド)以外のスレッドからUIを操作するにはInvokeまたはBeginInvokeを使う。Actionというデリゲートを使うのがポイント。というかC#の妙ちくりんなところ。たいていは数行ですむのでラムダ式で書くと簡潔だが、ラムダ式そのものを引数にはできない。
Invokeなら同期、BeginInvokeなら非同期で処理される。
// 同期処理 this.Invoke((Action)(() => { textboxHoge.Text = "Hoge"; }));
// 非同期処理 this.BeginInvoke((Action)(() => { textboxHoge.Text = "Hoge"; }));