所以我有一个非常基本的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?为什么标签没有正确更新?
感谢。
答案 0 :(得分:2)
由于BeginInvoke是异步调用,因此您需要向文本框发送过多更新,以便更快地进行更新,当文本框到达绘图时,它已经被计算在内到10000!
您可以同步更新文本,也就是说,调用循环将暂停,直到文本框更新完成,使用Invoke而不是BeginInvoke。