如何使用倒数计时器从几分钟开始倒计时

时间:2015-04-10 20:38:33

标签: c# windows timer windows-phone-8.1

目前正在开发一款简单的Windows Phone 8.1 silverlight应用程序,具有实施的倒计时时间。我有它工作的地方,我可以输入一定的分钟数,它倒计时很好,但我想要发生的是用户输入分钟数和从那里秒数倒计时,例如它目前是10,9 ,8,7,6,5,输入10秒。

我想要发生的是用户输入5并且它倒计时如下: 4:59 4:58 4:57

这是我目前的代码:

    timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 1);
    timer.Tick += timer_Tick;
    basetime = Convert.ToInt32(tbxTime.Text);;
    tbxTime.Text = basetime.ToString();
    timer.Start();
}


void timer_Tick(object sender, object e)
{
    basetime = basetime - 1;
    tbxTime.Text = basetime.ToString();
    if (basetime == 0)
    {
        timer.Stop();
    }

2 个答案:

答案 0 :(得分:1)

如果您只使basetime成为TimeSpan而不是int,则可以保留现有的大部分代码。通过适当的静态方法很容易从Minutes或Seconds设置其值。

var basetime = TimeSpan.FromMinutes(5);

然后你可以从中减去一秒钟:

basetime -= TimeSpan.FromSeconds(1);

并显示如下:

tbxTime.Text = basetime.ToString(@"m\:ss");

最后,将它与零进行比较也是微不足道的:

if (basetime <= TimeSpan.Zero)

有关更多显示选项,请参阅Custom TimeSpan Format Strings

答案 1 :(得分:1)

我认为您可以使用 TimeSpan 类的合适格式(您肯定会find many examples on SO)。简单示例可能如下所示(我假设您有一个输入时间的 TextBox 和显示计数器的 TextBlock );

DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(1) };
TimeSpan time;
public MainPage()
{
    this.InitializeComponent();
    timer.Tick += (sender, e) =>
        {
            time -= TimeSpan.FromSeconds(1);
            if (time <= TimeSpan.Zero) timer.Stop();
            myTextBlock.Text = time.ToString(@"mm\:ss");
        };
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{ time = TimeSpan.FromMinutes(int.Parse((sender as TextBox).Text)); }

private void startBtn_Click(object sender, RoutedEventArgs e)
{ timer.Start(); }

请注意,这是一个非常简单的示例。您还应该考虑 DispatcherTimer 是否是一个好主意 - 它适用于调度程序,因此如果您在主UI线程上运行一些大工作,它可能无法正确计算时间。在这种情况下,您可能会考虑使用不同的计时器,例如 System.Threading.Timer ,它在单独的线程上运行,因此您必须通过Dispatcher更新您的UI。