欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# winform子线程更新UI

程序员文章站 2022-06-10 14:30:53
...

在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);
            }
        }