thread.sleep 和 textboxes/labels 之间的奇怪互动
Strange interaction between thread.sleep and textboxes/labels
我正在为基于 Arduino 的仪器编写 VB 用户界面,当仪器正在做某事时,我希望 VB 等待。为了显示当时发生的情况,我打算更改标签或文本框以更新仪器的当前状态。但是,当我将 textbox1.text="" 与 thread.sleep(n) 命令结合使用时,VB 将在更新文本框之前先执行睡眠功能。
Imports System.Threading
Public Class Form
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = "Hello World!"
Thread.Sleep(3000)
End Sub
End Class
代码将等待 3 秒,然后写入 "Hello World"
知道如何在不先执行睡眠命令的情况下强制更新文本框或标签吗?
这就是 Windows 的工作方式。更新所有 UI 的线程与运行按钮单击处理程序的线程相同。通过让它休眠 3 秒,您可以停止它更新 UI 的工作。您对标签进行了更改,但它不会生效,直到线程退出您的点击处理程序方法并返回其绘制用户界面、处理点击等的正常工作
使用
Await Task.Delay(3000)
相反,将您的点击处理程序方法标记为 Async
简而言之Async/Await允许线程暂停当前方法(您的点击)并返回到它正在做的事情,然后当延迟到期时,线程将回到您的方法并且继续它停止的地方(在 await 行之后),所有变量完好无损等。使用此方法等待长 运行 的东西(如文件 IO/downloads)而不冻结你的 UI
我正在为基于 Arduino 的仪器编写 VB 用户界面,当仪器正在做某事时,我希望 VB 等待。为了显示当时发生的情况,我打算更改标签或文本框以更新仪器的当前状态。但是,当我将 textbox1.text="" 与 thread.sleep(n) 命令结合使用时,VB 将在更新文本框之前先执行睡眠功能。
Imports System.Threading
Public Class Form
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = "Hello World!"
Thread.Sleep(3000)
End Sub
End Class
代码将等待 3 秒,然后写入 "Hello World" 知道如何在不先执行睡眠命令的情况下强制更新文本框或标签吗?
这就是 Windows 的工作方式。更新所有 UI 的线程与运行按钮单击处理程序的线程相同。通过让它休眠 3 秒,您可以停止它更新 UI 的工作。您对标签进行了更改,但它不会生效,直到线程退出您的点击处理程序方法并返回其绘制用户界面、处理点击等的正常工作
使用
Await Task.Delay(3000)
相反,将您的点击处理程序方法标记为 Async
简而言之Async/Await允许线程暂停当前方法(您的点击)并返回到它正在做的事情,然后当延迟到期时,线程将回到您的方法并且继续它停止的地方(在 await 行之后),所有变量完好无损等。使用此方法等待长 运行 的东西(如文件 IO/downloads)而不冻结你的 UI