等待1秒再重新启动代码 - VB.NET

时间:2015-08-13 08:12:28

标签: vb.net wait

我迫切需要帮助我正在制作的游戏。对于一些上下文,我正在制作一个记忆游戏,我有以下一段代码很麻烦。我在表单上有一堆标签,确切地说是16,每个标签中放置一个随机生成的符号。每个符号在标签中出现两次。

      ------------------------------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),但它仍然没有显示第二次错误点击。我知道我使用的代码是有效的,因为当我使用消息框时,我可以看到两个符号,当两次点击都正确时,它会保留。

2 个答案:

答案 0 :(得分:1)

Threading.Thread.Sleep(500)实际上会暂停你的代码半秒钟。但是在这段时间内它不会做任何事情,甚至不会刷新你的控件。要获得所需的效果,您需要在调用YourControl.Refresh之前调用Threading.Thread.Sleep方法以强制控件立即重绘。

另外,我建议你不要在UI线程上调用Threading.Thread.Sleep。它会给程序挂起感觉。而是在一个单独的线程上工作。您可以自己创建一个单独的线程来销毁它,也可以使用具有内置所有功能的BackgroundWorker控件。

以下是我很久以前写过的关于BackgroundWorker的文章的链接,它可能对您有用:

http://www.vbforums.com/showthread.php?680130-Correct-way-to-use-the-BackgroundWorker

答案 1 :(得分:0)

在sub之外声明一个变量,用于存储定时器结束时应该翻转的标签。

标签点击集 storedLabel = sender 计时器勾选设置storedLabel.ForeColor = Color.DarkRed