我正在使用 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;