延迟windows 8应用程序倒计时计时器c#
我有一个windows 8游戏应用程序,每个关卡都使用一个计时器,我正在尝试将计时器设置为3秒 代码我必须启动计时器工作,但我似乎不能延迟计时器,以便我显示文字倒计时 代码如下:延迟windows 8应用程序倒计时计时器c#,c#,xaml,windows-8,timer,countdown,C#,Xaml,Windows 8,Timer,Countdown,我有一个windows 8游戏应用程序,每个关卡都使用一个计时器,我正在尝试将计时器设置为3秒 代码我必须启动计时器工作,但我似乎不能延迟计时器,以便我显示文字倒计时 代码如下: private async void timer_Tick(object sender, object e) { await Time.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriori
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);}}
所以我把async放在那里,因为我认为应该把wait Task.Delay(3000)放在那里;后计数器延迟计时器,但它不工作。我不想看到WinRT Xaml工具包的倒计时计时器,因为我不想看到动画
任何关于我做错了什么的建议都会很好 那么您大概想每秒更新一次显示,以获得此倒计时?但如果我理解的话,出于某种原因,你想把一切都推迟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--;
}
这在精神上更接近于你所写的(据我所知),只是它有效,但它似乎不必要地复杂。为什么不直接编程定时器在正确的时间给你打电话,而不是在错误的时间收到回电,然后尝试补偿呢?是计时器。当你告诉它的时候,它会给你打电话的 我不知道我是否理解你的问题,但如果你想简单地在进程线程之间加上特定的时间延迟,那么这段代码可以帮助你
wait Task.delay(TimeSpan.FromSeconds(1.5))代码>简单地考虑秒。让我知道这是否有效。您是否正在使用?调用您的timer\u Tick
功能的计时器是否设置为在该级别的时间到期时熄灭(例如,它在60秒后触发,或其他情况),或者计时器是否以您希望更新倒计时的频率运行(例如,每秒一次)?很难确定你的意图——你是否有可能编辑这个问题,因为根本不清楚你所说的“我正在尝试计时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--;
}