等待 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