VB定时器倒计时

时间:2016-11-22 17:15:26

标签: vb.net

我正在尝试进行操作,然后等待3秒钟,然后继续执行其余代码。

我在名为tmrTurnTimer的设计器中设置了一个间隔为3000的计时器。tick事件如下

Private Sub tmrTurnTimer_Tick(sender As Object, e As EventArgs) Handles tmrTurnTimer.Tick

    Dim intTimer As Integer = 3

    If intTimer > 0 Then
        lblEnemyDamage.Text = intHeroAtk.ToString()
        intTimer -= 1
    Else
        tmrTurnTimer.Stop()
        lblEnemyDamage.Text = ""
    End If
End Sub

在英雄攻击之后我打电话给蜱事件,希望在敌人攻击之前延迟三秒钟,然而,由于英雄和敌方标签同时显示损坏,所有这一切都立即完成as"攻击"点击。

'Call Attack Sub with Hero damage ranges plugged in
            Attack(intHeroAtk, 5, 31, intEnemyHP, 8, 14)

            'Display damage done in Enemy damage label
            lblEnemyDamage.Text = intHeroAtk.ToString()


            'If the enemy health is above zero
            If intEnemyHP > 0 Then

                'Start timer and display damage from hero in enemy damage label
                tmrTurnTimer.Start()

                'This is where I would like the program to wait for 
                'three seconds before proceeding

                'Call Attack Sub with Enemy damage ranges plugged in
                Attack(intEnemyAtk, 5, 21, intHeroHP, 10, 11)

                'Display damage done in Hero damage label
                lblHeroDamage.Text = intEnemyAtk.ToString()

                DisplayStats(intHeroHP, intHeroMP)

如果这是一个愚蠢的请求,请原谅我。

1 个答案:

答案 0 :(得分:0)

首先关闭计时器并不像你想象的那样工作。他们没有暂停UI线程,他们反其道而行之,他们在自己的线程上启动并让UI继续其业务。 Timer会在时间结束后通知UI线程。您需要做的是将您需要在tmrTurnTimer_Tick事件方法中经过3秒之后发生的代码放入。如果你希望伤害文本在1秒后消失,那么我会把它放在另一个设置为1秒的Timer上。

'Call Attack Sub with Hero damage ranges plugged in
        Attack(intHeroAtk, 5, 31, intEnemyHP, 8, 14)

        'Display damage done in Enemy damage label
        lblEnemyDamage.Text = intHeroAtk.ToString()


        'If the enemy health is above zero
        If intEnemyHP > 0 Then

            'Start timer and display damage from hero in enemy damage label
            tmrTurnTimer.Start()
    lblEnemyDamage.Text = intHeroAtk.ToString()
    tmrEnemyDamageTimer.Start()

转码

    Private Sub tmrTurnTimer_Tick(sender As Object, e As EventArgs) Handles tmrTurnTimer.Tick

    tmrTurnTimer.Stop()

                'Call Attack Sub with Enemy damage ranges plugged in
                Attack(intEnemyAtk, 5, 21, intHeroHP, 10, 11)

                'Display damage done in Hero damage label
                lblHeroDamage.Text = intEnemyAtk.ToString()

                DisplayStats(intHeroHP, intHeroMP)
End Sub

敌人伤害代码(需要创建另一个计时器)

    private Sub tmrEnemyDamageTimer_Tick(sender As Object, e As EventArgs) Handles tmrTurnTimer.Tick

    tmrEnemyDamageTimer.Stop()
    lblEnemyDamage.Text = ""
End Sub