我正在开发一个控制硬件设备的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
为什么这段代码会以这种方式运行?
答案 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之前。