文本框在 for 循环中未更新
我的 WPF 中有一个 for 循环。在循环完成之前,文本框不会更新。
我的代码:
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1500);
// MessageBox.Show(i.ToString());
updateTextBox(i);
}
更新功能:
private void updateTextBox(int i)
{
// MessageBox.Show("reached here:" + i.ToString());
txtExecLog.AppendText("\n" + i.ToString());
}
如果我取消注释消息框文本,它会一一更新,否则它会在 15 秒 (1.5*10)
后更新包含所有值的文本框。
I have a for loop in my WPF. The textbox does not get updated until the loop has finished.
My code:
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1500);
// MessageBox.Show(i.ToString());
updateTextBox(i);
}
Update function:
private void updateTextBox(int i)
{
// MessageBox.Show("reached here:" + i.ToString());
txtExecLog.AppendText("\n" + i.ToString());
}
If I uncomment the messagebox text, it updates one by one, otherwise it updates after 15 secs (1.5*10)
the textbox with all the values.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当你睡觉时,你会阻塞 UI 线程。你不能这样做——当你睡觉的时候,UI 线程上什么也不能处理。如果您想定期(在 UI 线程上)执行操作,请使用
DispatcherTimer
。You're blocking the UI thread when you sleep. You mustn't do that - nothing can be processed on the UI thread while you're sleeping. If you want to take an action periodically (on the UI thread) use
DispatcherTimer
.您正在 UI 线程中运行循环。当您调用 Thread.Sleep() 时,UI 线程会休眠,因此在 UI 线程阻塞 for 循环结束之前无法更新文本框。
You are running your loop in the UI thread. When you call Thread.Sleep() the UI thread sleeps and therefore the textbox can't be updated before end of the UI thread blocking for loop.