【发布时间】:2016-06-09 17:08:48
【问题描述】:
所以我有一个非常基本的 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?为什么标签没有正确更新?
谢谢。
【问题讨论】:
-
您希望数字在每次单击按钮时递增?
-
@LaneL 不,我想按一个按钮,看看数字上升到 10000
-
使用后台工作人员...参考这里的详细信息 - msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx
-
@Sanket 我知道 Backgroundworker,我想知道为什么 Begininvoke 不起作用。
-
您创建了一个消防水管漏洞。您正在以非常高的速度猛击 UI 线程。太快以至于无法保持标签更新,调用的优先级高于绘制,并且太快以至于你的眼睛看不到变化。您必须放慢速度,例如使用 Task.Delay(15)。
标签: c# user-interface begininvoke