VB.NET - 按下按钮时,执行操作,等待几秒钟,然后执行其他操作

时间:2017-12-16 03:22:47

标签: vb.net

我想这样做,当我按下按钮时,它会执行一个动作,等待一点并做另一个动作。但是,当我这样做时,它不会在睡眠完成之前执行第一个操作。我也试过制作一个后台线程,但它无法访问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

1 个答案:

答案 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)