等待 1 秒,然后再次开始代码 - VB.NET
Wait for 1 second before starting code again - VB.NET
我正在制作一款游戏,迫切需要帮助。对于一些上下文,我正在制作一个记忆游戏,并且我有以下一段很麻烦的代码。我在表格上有一堆标签,准确地说是 16 个,每个标签中放置了 1 个随机生成的符号。每个符号在标签中出现两次。
------------------------------Continued----------------------------------------
'MsgBox("hello") 'used to check if the second inccorect press shows up - it does show but instantly changes colour
'''''''''''''''''NEED SOME CODE THAT PAUSES IT HERE'''''''''''''''
labels(0).ForeColor = Color.DarkRed
sender.ForeColor = Color.DarkRed
End If
flips = 1
End If
End If
tmrmemory.Enabled = True ' starts the timer after the user clicks the first label
End Sub
应该发生的是,当点击的标签不匹配时,它应该在短时间内显示两个点击的标签,然后再将它们都改回 "DarkRed",这是表单背景的颜色.
我试过使用计时器,但后来我不能使用 sender.forecolor=color.darkred
,因为它不是全局声明的。
我也试过使用命令Threading.Thread.Sleep(500)
,但它仍然没有显示第二次错误的点击。我知道我使用的代码有效,因为当我使用消息框时,我可以看到两个符号,并且当两次点击正确时,它会保留。
在 sub 外部声明一个变量,用于存储计时器结束时应翻转的标签。
标签点击集
storedLabel = sender
计时器滴答集 storedLabel.ForeColor = Color.DarkRed
Threading.Thread.Sleep(500)
实际上会暂停你的代码半秒钟。然而,在此期间它不会做任何事情,甚至不会刷新您的控件。为了得到你想要的效果,你需要在调用Threading.Thread.Sleep
之前调用YourControl.Refresh
方法强制控件立即重绘。
附带说明一下,我建议您不要在 UI 线程上调用 Threading.Thread.Sleep
。会给人一种程序挂起的感觉。而是在单独的线程上执行您的工作。您可以自己完成所有工作,从创建一个单独的线程到销毁它,或者使用内置所有功能的 BackgroundWorker
控件。
这是我很久以前写的一篇关于 BackgroundWorker 的文章的link,可能对您有用:
http://www.vbforums.com/showthread.php?680130-Correct-way-to-use-the-BackgroundWorker
我正在制作一款游戏,迫切需要帮助。对于一些上下文,我正在制作一个记忆游戏,并且我有以下一段很麻烦的代码。我在表格上有一堆标签,准确地说是 16 个,每个标签中放置了 1 个随机生成的符号。每个符号在标签中出现两次。
------------------------------Continued----------------------------------------
'MsgBox("hello") 'used to check if the second inccorect press shows up - it does show but instantly changes colour
'''''''''''''''''NEED SOME CODE THAT PAUSES IT HERE'''''''''''''''
labels(0).ForeColor = Color.DarkRed
sender.ForeColor = Color.DarkRed
End If
flips = 1
End If
End If
tmrmemory.Enabled = True ' starts the timer after the user clicks the first label
End Sub
应该发生的是,当点击的标签不匹配时,它应该在短时间内显示两个点击的标签,然后再将它们都改回 "DarkRed",这是表单背景的颜色.
我试过使用计时器,但后来我不能使用 sender.forecolor=color.darkred
,因为它不是全局声明的。
我也试过使用命令Threading.Thread.Sleep(500)
,但它仍然没有显示第二次错误的点击。我知道我使用的代码有效,因为当我使用消息框时,我可以看到两个符号,并且当两次点击正确时,它会保留。
在 sub 外部声明一个变量,用于存储计时器结束时应翻转的标签。
标签点击集
storedLabel = sender
计时器滴答集 storedLabel.ForeColor = Color.DarkRed
Threading.Thread.Sleep(500)
实际上会暂停你的代码半秒钟。然而,在此期间它不会做任何事情,甚至不会刷新您的控件。为了得到你想要的效果,你需要在调用Threading.Thread.Sleep
之前调用YourControl.Refresh
方法强制控件立即重绘。
附带说明一下,我建议您不要在 UI 线程上调用 Threading.Thread.Sleep
。会给人一种程序挂起的感觉。而是在单独的线程上执行您的工作。您可以自己完成所有工作,从创建一个单独的线程到销毁它,或者使用内置所有功能的 BackgroundWorker
控件。
这是我很久以前写的一篇关于 BackgroundWorker 的文章的link,可能对您有用:
http://www.vbforums.com/showthread.php?680130-Correct-way-to-use-the-BackgroundWorker