文本框在 for 循环中未更新

发布于 2024-12-10 21:29:11 字数 460 浏览 0 评论 0原文

我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薆情海 2024-12-17 21:29:11

当你睡觉时,你会阻塞 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.

玩世 2024-12-17 21:29:11

您正在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文