我想这样做,当我按下按钮时,它会执行一个动作,等待一点并做另一个动作。但是,当我这样做时,它不会在睡眠完成之前执行第一个操作。我也试过制作一个后台线程,但它无法访问ListBox。有人可以解释一下我是如何做到的,以及为什么我现在的这个不起作用?谢谢。
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
ListBox1.Items.Add("Thing1")
Threading.Thread.Sleep(500)
ListBox1.Items.Add("Thing2")
End Sub
答案 0 :(得分:3)
在睡眠完成之前,它不会执行第一个动作
不完全是。该操作确实发生了,但UI无法反映更改,直到UI线程可用于重新绘制UI。但是,因为您将UI线程置于休眠状态,所以不会发生这种情况。
使用Task.Delay
代替睡眠,它与睡眠类似,但UI线程可以自由执行其他工作,包括刷新UI:
Private Async Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
ListBox1.Items.Add("Thing1")
Await Task.Delay(500)
ListBox1.Items.Add("Thing2")
End Sub
请注意,要实现此功能,您需要将Async
添加到方法签名,并Await
添加到Task.Delay()
的调用。
要了解上述代码的工作原理,您可能需要阅读Asynchronous Programming with Async and Await (Visual Basic)。