DispatcherTimer为倒计时时钟问题

时间:2015-03-04 15:27:55

标签: c# windows-store-apps

我已经开始开发一个测验应用程序,每个问题的倒计时时间为60秒。我搜索了其他问题,但找不到我的具体问题。当显示第一个问题时,屏幕显示“60”并且倒计时正常进行。但是,当生成第二个问题时(按钮单击提交后),计数器再次启动,但这次使用2秒间隔。然后当点击后生成第三个问题时,它会以3秒的间隔倒计时!然后我注意到计时器显示在每个问题中开始减少1秒。 (问题1从60开始,问题2从59开始......)

这是我第一次使用DispatcherTimer,所以我正在学习。我的目标是让计时器始终以1秒的间隔倒计时。

public sealed partial class QuickPage : Page
{
    DispatcherTimer timeLeft = new Dispatcher();
    int timesTicked = 60;

    public void CountDown()
    {
        timeLeft.Tick += timeLeft_Tick;
        timeLeft.Interval = new TimeSpan(0,0,0,1);
        timeLeft.Start();
    }

    public void timeLeft_Tick(object sender, object e)
    {
        lblTime.Text = timesTicked.ToString();

        if (timesTicked > 0)
        {
            timesTicked--;
        }
        else
        {
            timeLeft.Stop();
            lblTime.Text = "Times Up";
        }
    }
}

然后,如果用户是对的,我会使用按钮单击:

timeLeft.Stop();
timesTicked = 60
QuestionGenerator();

问题生成器功能如下所示:

private void QuestionGenerator()
{
    CountDownTimer();

    if (iAsked < 6)
    {
        //Code to generate random question
    }
}

1 个答案:

答案 0 :(得分:1)

每次致电DispatcherTimer时,请勿订阅CountDown

DispatcherTimer timeLeft;
int timesTicked = 60;

public QuickPage()
{
    timeLeft = new Dispatcher();
    timeLeft.Tick += timeLeft_Tick;
    timeLeft.Interval = new TimeSpan(0,0,0,1);
}

private void QuestionGenerator()
{
    timeLeft.Start();

    if (iAsked < 6)
    {
        //Code to generate random question
    }
}