除非我使用MessageBox.Show(),为什么我的命令不会立即执行?

时间:2012-03-21 19:01:07

标签: vb.net winforms

我正在开发一个控制硬件设备的Windows Forms应用程序。我有一个关闭设备的按钮。点击事件如下所示:

Private Sub btnTurnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnTurnOff.Click

    device.SetOff() 'Turn off the device
    system.threading.thread.sleep(2000) 'Pause for 2 seconds
End Sub

奇怪的是,直到2秒后设备才会关闭。暂停,但如果我在SetOff()命令后立即插入一个MessageBox,那么设备会在2秒之前立即关闭。暂停:

Private Sub btnTurnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnTurnOff.Click

    device.SetOff() 'turn off the device
    MessageBox.Show("Device is now off")
    system.threading.thread.sleep(2000) 'Pause for 2 seconds
End Sub

为什么这段代码会以这种方式运行?

3 个答案:

答案 0 :(得分:2)

因为你正在睡觉......

所以程序在两秒钟内什么都不做。添加消息框使程序继续运行,之后,线程进入休眠状态。

答案 1 :(得分:0)

线程在睡觉时什么都不做,有点像在那里。 当您显示消息框时,该线程仍在运行。

尝试快速测试,例如

For i As Integer = 0 To 100
    system.threading.thread.sleep(20)
Next

更好的方法是

Do While [Device Is On]
    system.threading.thread.sleep(100)
Loop

更好的方法是如果device.SetOff()在完成它正在做的事情时调用一个事件。

答案 2 :(得分:0)

您需要切换两个并将Sleep放在MessageBox之前。