C#编程之子线程更新UI
以前我都是这种做法:
private void WorkThread2()
{
while (true)
{
UpdateLabel1(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Thread.Sleep(500);
}
}
private void UpdateLabel1(string msg)
{
if (this.label1.InvokeRequired)//如果调用控件的线程和创建创建控件的线程不是同一个则为True
{
this.label1.Invoke(new Action<string>(UpdateLabel1), new object[] { msg });
}
else
{
this.label1.Text = msg;
}
}
现在可以用这样更简洁,用BeginInvoke和delegate的方法:
private void WorkThread()
{
while (true)
{
this.label1.BeginInvoke((MethodInvoker)delegate
{
label1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
});
Thread.Sleep(500);
}
}