从Begininvoke更新GUI组件

时间:2016-06-09 17:08:49

标签: c# user-interface begininvoke

所以我有一个非常基本的Windows应用程序,我希望从1到10000计数 并在标签中显示数字:

private void button1_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(() =>
        {
            for (int i = 0; i < 10000; i++)
            {
                BeginInvoke((MethodInvoker)delegate ()
                {
                    label3.Text = i.ToString();
                });
            }
        });

        thread.Start(); 
}

问题是标签文本没有更新,只显示最后一个循环计数器,即9999.是否在UI线程上调用了BeginInvoke?为什么标签没有正确更新?

感谢。

1 个答案:

答案 0 :(得分:2)

由于BeginInvoke是异步调用,因此您需要向文本框发送过多更新,以便更快地进行更新,当文本框到达绘图时,它已经被计算在内到10000!

您可以同步更新文本,也就是说,调用循环将暂停,直到文本框更新完成,使用Invoke而不是BeginInvoke。