延迟windows 8应用程序倒计时计时器c#

延迟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

我有一个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);}}
所以我把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--;
}