我正在用vb做表格,我有一个过程,我需要能够在任何时候切断它,就像紧急停止,然后能够恢复它。我已经成功地为实际的交通灯(它需要能够被切断)的代码,虽然它是非常重复的,我只是刚刚开始编码,所以道歉。
现在看起来就像这样
Public Class Form1
Dim x = True
Private Async Sub btn_start_Click(sender As Object, e As EventArgs) Handles btn_start.Click
While x
If Not x Then
Exit While
End If
Await Task.Delay(5000)
SB_yellow.BackColor = Color.Yellow
If Not x Then
Exit While
End If
Await Task.Delay(3000)
SB_green.BackColor = Color.Green
SB_yellow.BackColor = Color.White
SB_red.BackColor = Color.White
If Not x Then
Exit While
End If
Await Task.Delay(10000)
SB_green.BackColor = Color.White
SB_yellow.BackColor = Color.Yellow
If Not x Then
Exit While
End If
Await Task.Delay(3000)
SB_yellow.BackColor = Color.White
SB_red.BackColor = Color.Red
If Not x Then
Exit While
End If
Await Task.Delay(5000)
SA_yellow.BackColor = Color.Yellow
If Not x Then
Exit While
End If
Await Task.Delay(3000)
SA_red.BackColor = Color.White
SA_yellow.BackColor = Color.White
SA_green.BackColor = Color.Green
If Not x Then
Exit While
End If
Await Task.Delay(10000)
SA_green.BackColor = Color.White
SA_yellow.BackColor = Color.Yellow
If Not x Then
Exit While
End If
Await Task.Delay(3000)
SA_yellow.BackColor = Color.White
SA_red.BackColor = Color.Red
End While
End Sub
Private Sub btn_stop_Click(sender As Object, e As EventArgs) Handles btn_stop.Click
x = False
MsgBox("stop")
End Sub
End ClassSB和SA是设置和设置交通灯。
目前,当我运行我的表单,我按btn_stop,它等待直到它完成改变交通灯的另一种颜色,然后它停止时间循环。我以前使用过threading.thread.sleep(),但是我去掉了它,因为它关闭了UI,所以我最终使用了await,现在它可以工作,但我不确定如何在可能的情况下切断代码/暂停它。我选择了一个while循环,因为我想不出另一种方法来创建代码循环。
对于进一步的上下文(万一有帮助),我的任务要求我们制作一个程序,运行一系列预先确定的交通灯,用于设置a和设置b,然后能够覆盖它,以便在发生“紧急情况”时将两组信号灯设置为红色,然后安全地重新启动信号灯。最后,开发一个可以控制交通灯的移动应用程序。
·为设置A交通灯提供正确的操作顺序。为设置B交通灯提供正确的操作顺序。提供一种选项,以覆盖操作序列并将两组交通灯更改为红色,例如,当交付车辆需要进入或离开修理区域时,停止道路工程两侧的所有交通。能够安全地重新启动交通灯操作序列,例如在超驰触发之后或在任何其他时间。·开发一款可远程控制交通灯的移动应用程序。在开发软件解决方案系统时,您应该考虑增强的用户体验以及它将如何处理可能发生的任何意外事件。
目前在墙上,不知道该怎么做。我知道我可以清理代码,让它看起来更好看,这只是第一个草稿/尝试,我并不打算走到这一步。任何帮助都是非常感谢的!以及任何需要培养的技巧或习惯。
发布于 2022-04-01 16:41:37
我假设您可以访问计时器控制,因为您正在创建一个表单。我想用它会对你有帮助。
我更改了x,使一个计数器持续几秒钟,在确定当前时间时,它将是有用的。
Dim x As Integer = 0
Private Sub btn_start_Click(sender As Object, e As EventArgs) Handles btn_start.Click
Timer1.Interval = 1000
Timer1.Start()
End Sub停止按钮将停止计时器,重置计数器,并将交通灯设置为停止。
Private Sub btn_stop_Click(sender As Object, e As EventArgs) Handles btn_stop.Click
Timer1.Stop()
x = 0
SB_green.BackColor = Color.White
SB_green.BackColor = Color.White
SB_red.BackColor = Color.Red
SA_green.BackColor = Color.White
SA_yellow.BackColor = Color.White
SA_red.BackColor = Color.Red
MsgBox("stop")
End Sub计时器将设置交通灯的颜色,取决于您设置的颜色。
case语句仅为占位符。我认为在这种情况下使用case语句不是最好的,因为延迟是不可自定义的
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Select Case x
Case 0
SB_green.BackColor = Color.Green
SB_yellow.BackColor = Color.White
SB_red.BackColor = Color.White
SA_green.BackColor = Color.White
SA_yellow.BackColor = Color.White
SA_red.BackColor = Color.Red
Case 6
SB_green.BackColor = Color.White
SB_yellow.BackColor = Color.Yellow
SB_red.BackColor = Color.White
SA_green.BackColor = Color.White
SA_yellow.BackColor = Color.Yellow
SA_red.BackColor = Color.White
Case 9
SB_green.BackColor = Color.White
SB_yellow.BackColor = Color.White
SB_red.BackColor = Color.Red
SA_green.BackColor = Color.Green
SA_yellow.BackColor = Color.White
SA_red.BackColor = Color.White
Case 13
x = 0
Exit Sub
End Select
x += 1
End Subhttps://stackoverflow.com/questions/71703876
复制相似问题