XamarinStartTimer从TimeSpan中减去秒不起作用
c#
我正在使用 Device 类的 StartTimer 方法使用 Xamarin Forms 编写倒数计时器。问题是选择的时间没有减少秒,而是保持原来的选择。我不知道问题出在哪里。谢谢您的帮助。
public partial class MainPage : ContentPage
{
private int minutes = 0;
private int hours = 0;
private TimeSpan restTime = TimeSpan.Zero;
public MainPage()
{
InitializeComponent();
StartCountdown(hours, minutes);
}
public void StartCountdown(int hours, int min)
{
var M = TimeSpan.FromMinutes(min);
var H = TimeSpan.FromHours(hours);
restTime = H.Add(M);
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
//Here should subtract from variable restTime one second every second
restTime.Add(new TimeSpan(0,0,-1));
if (restTime == TimeSpan.Zero)
{
//Do something
return false;
}
else
{
return true;
}
});
}
回答
你正在调用restTime.Add,但没有对结果做任何事情,在这里:
restTime.Add(new TimeSpan(0,0,-1));
该Add方法不会改变现有的TimeSpan- 它返回一个新的。相反,您想要:
restTime = restTime.Add(new TimeSpan(0, 0, -1));
或更易读的国际海事组织:
restTime -= TimeSpan.FromSeconds(1);
(我也习惯restTime = new TimeSpan(hours, min, 0);开始,可能。或者可能restTime = TimeSpan.FromHours(hours) + TimeSpan.FromMinutes(min);。)
您可能希望有一秒钟的字段:
private static readonly TimeSpan OneSecond = TimeSpan.FromSeconds(1);
...
restTime -= OneSecond;