在winform界面开发时,肯定会遇到子线程更新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; } }
现在可以更简洁一点:
private void WorkThread() { while (true) { this.label1.BeginInvoke((MethodInvoker)delegate { label1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); }); Thread.Sleep(500); } }
文章来源: https://blog.csdn.net/jichao1010/article/details/91993365