如何暂停Windows手机中的计时器?

时间:2014-01-05 09:48:43

标签: c# timer windows-phone

在再次启动计时器后的代码中,它从当前值开始,而不是从停止的值开始。如何暂停此计时器?

public Page1()
{
    InitializeComponent();
    _rnd = new Random();
    _timer = new DispatcherTimer();
    _timer.Tick += new EventHandler(TimerTick);
    _timer.Interval = new TimeSpan(0, 0, 0, 1);
}

void TimerTick(object sender, EventArgs e)
{
    var time = DateTime.Now - _startTime;
    txtTime.Text = string.Format(Const.TimeFormat, time.Hours, time.Minutes, time.Seconds);
}

public void NewGame()
{
    _moves = 0;
    txtMoves.Text = "0";
    txtTime.Text = Const.DefaultTimeValue;
    Scrambles();
    while (!CheckIfSolvable())
    {
      Scrambles();
    }

    _startTime = DateTime.Now;
    _timer.Start();

    //GridScrambling.Visibility = System.Windows.Visibility.Collapsed;
}

private void Pause_Click(object sender, System.Windows.RoutedEventArgs e)
{
    // TODO: Add event handler implementation here.

    NavigationService.Navigate(new Uri("/Page4.xaml", UriKind.Relative));
    _timer.Stop();
}

private void Play_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    // TODO: Add event handler implementation here.
    _timer.Start();
}

1 个答案:

答案 0 :(得分:0)

由于this表示Stop方法仅更改IsEnabled属性,this表示此属性仅阻止引发Tick事件,我不认为有一种方法可以简单地“暂停”计时器。最好的方法是每次“暂停”它时重新初始化计时器,如果你真的希望它再次开始清理。

但我不认为这是你真正的问题。暂停游戏时,计时器停止工作。当你继续它时,计时器再次开始工作。当你现在尝试计算从这个时刻到开始时间的时间时,你犯了一个大错:你必须忽略暂停的时间。因为当你玩游戏2s,然后暂停10s然后继续游戏,计时器显示12s,而不是2s,不是吗?也许你应该将暂停的时间存储在一个变量中并从实际游戏时间中减去它。