我有一个Windows 8游戏应用程序,每个级别使用一个计时器,我试图计时器3秒。
我必须启动计时器的代码工作,但我似乎无法延迟计时器,以便我显示单词来计算它。
以下是代码:
private async void timer_Tick(object sender, object e)
{
await
Time.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low,
() =>
{ Time.Text = string.Format("{0}:{1}", (Counter/60), (Counter%60).ToString().PadLeft(2, ' ')); });
Counter--;
await Task.Delay(3000);}}
所以我把异步放在那里因为我认为我应该等待Task.Delay(3000);在计数器延迟计时器但它不起作用。我不想使用WinRT Xaml工具包倒计时器,因为我不希望那里有动画。
关于我做错的任何建议都会很棒!
答案 0 :(得分:2)
所以大概你想要每秒更新一次显示,以便进行倒计时?但如果我明白了,出于某种原因你想要将所有内容延迟3秒钟。
如果你想让事情发生在他们目前正在发生的3秒之后,显而易见的解决方案是对计时器进行编程,以便在你真正想要的时候给你打电话:
private DispatcherTimer t = new DispatcherTimer();
private int Counter = 120;
public MainPage()
{
InitializeComponent();
t.Interval = TimeSpan.FromSeconds(4);
t.Tick += timer_Tick;
t.Start();
}
private void timer_Tick(object sender, object o)
{
t.Interval = TimeSpan.FromSeconds(1);
Time.Text = string.Format("{0}:{1}", (Counter / 60), (Counter % 60).ToString().PadLeft(2, ' '));
Counter--;
}
这使得第一个刻度需要4秒才能到达,然后将间隔调整为1秒。所以你会得到间隔为1秒的刻度线,但一切都会比其他情况晚3秒发生。 (如果最初将滴答间隔设置为1,则第一个滴答将需要1秒才能到达,这就是为什么最初需要4秒的延迟 - 初始滴答为3只会使事情延迟2秒。)
但是,如果你需要立即做一些事情,有些事情需要延迟,一个明显的方法就是将你的处理程序中的计数调整3秒:
private const int LevelMaxTime = 120;
private DispatcherTimer t = new DispatcherTimer();
private int Counter = LevelMaxTime;
public MainPage()
{
InitializeComponent();
t.Interval = TimeSpan.FromSeconds(1);
t.Tick += timer_Tick;
t.Start();
}
private void timer_Tick(object sender, object o)
{
// Do the undelayed work here, whatever that is...
// Next, we do the delayed work, if there is any yet.
int effectiveCount = Counter + 3;
if (effectiveCount <= LevelMaxTime)
{
Time.Text = string.Format("{0}:{1}", (effectiveCount / 60), (effectiveCount % 60).ToString().PadLeft(2, ' '));
}
Counter--;
}
这只需要有效当前时间为Current
所说的3秒之前的时间,从而将所有内容延迟3秒。
你可以做更像原始代码的事情:
private async void timer_Tick(object sender, object o)
{
// Wait for 3 seconds...for some reason
await Task.Delay(TimeSpan.FromSeconds(3));
Time.Text = string.Format("{0}:{1}", (Counter / 60), (Counter % 60).ToString().PadLeft(2, ' '));
Counter--;
}
这与你所写的内容(据我所知)更接近,只有它有效,但它似乎不必要地复杂化。为什么不编程定时器在正确的时间给你打电话,而不是在错误的时间收到回调然后试图补偿?这是一个计时器。当你告诉它时它会打电话给你!