スレッドの宣言と開始
// 宣言
private Thread _thd;
// スレッドの実行
private void Form1_Load(object sender, EventArgs e)
{
_thd = new Thread(new ThreadStart(_thdProc));
_thd.IsBackground = true;
_thd.Start();
}
スレッド内でのコントロール操作(参考サイト:
方法 : Windows フォーム コントロールのスレッド セーフな呼び出しを行う)
// スレッド
private void _thdProc()
{
while(true)
{
// コントロール操作
this.SetText(DateTime.Now.ToString());
Thread.Sleep(5);
}
}
// デリゲート
private delegate void SetTextCallBack(string text);
// コントロール操作用
private void SetText(string text)
{
if (this.label1.InvokeRequired)
{
SetTextCallBack d = new SetTextCallBack(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.label1.Text = text;
}
}
ラムダ式使用(参考サイト:
ひっそりと・とぼとぼと 【C#】スレッド間のコントロール操作について)
private void _thdProc()
{
while(true)
{
// ラムダ式を使用してコントロール操作
this.Invoke((Action)delegate()
{
this.label1.Text = DateTime.Now.ToString();
});
Thread.Sleep(5);
}
}