目前正在开发一款简单的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();
}
答案 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。