我正在使用Windows Phone 8 SDK开发游戏 我需要一个倒数计时器。
我第一次实现了Dispatcher计时器 CLICK 计时器减少没有错误!
但是如果我按重置(它应该重置为 60 SECONDS 并开始倒计时) 它重置为60 BUT 它每秒减少“ 2秒”!
如果再按一次重置,则每秒减少 3秒
我写的示例代码与我的应用程序的想法相同:(同样错误 结果)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp3.Resources;
using System.Windows.Threading;
namespace PhoneApp3
{
public partial class MainPage : PhoneApplicationPage
{
private DispatcherTimer time = new DispatcherTimer(); // DISPATCHER TIMER
private int left;
// Constructor
public MainPage()
{
InitializeComponent();
}
//Starting Countdown
private void Start_Click_1(object sender, RoutedEventArgs e)
{
left = 60; // time left
time.Interval = TimeSpan.FromSeconds(1);
time.Tick += time_Tick;
time.Start();
}
void time_Tick(object sender, EventArgs e)
{
left--; // decrease
txt.Text = Convert.ToString(left); // update text
}
private void reset_Click(object sender, RoutedEventArgs e)
{
time.Stop();
Start_Click_1(null, null); // RE - START
}
}
}
答案 0 :(得分:4)
每当您按下重置并再次运行Start_Click_1
时,您就会再次订阅time_Tick
:
time.Tick += time_Tick;
因此,在按下Reset 3次后,您订阅了3次,每次tick事件触发时,以下代码行运行3次:
left--;
将订阅移至构造函数:
public MainPage()
{
InitializeComponent();
time.Tick += time_Tick;
}
//Starting Countdown
private void Start_Click_1(object sender, RoutedEventArgs e)
{
left = 60; // time left
time.Interval = TimeSpan.FromSeconds(1);
time.Start();
}
答案 1 :(得分:1)
正如汉斯在评论中所说,每次点击按钮时,你都错误地添加了事件处理程序。
您应该调用此代码
time.Interval = TimeSpan.FromSeconds(1);
time.Tick += time_Tick;
在构造函数中,而不是事件处理程序。