Xamarin StartTimer 从 TimeSpan 中减去秒不起作用

Yve*_*ves 0 c# xamarin.forms

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

        });

    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

你正在调用restTime.Add,但没有对结果做任何事情,在这里:

restTime.Add(new TimeSpan(0,0,-1));
Run Code Online (Sandbox Code Playgroud)

Add方法不会改变现有的TimeSpan- 它返回一个新的。相反,您想要:

restTime = restTime.Add(new TimeSpan(0, 0, -1));
Run Code Online (Sandbox Code Playgroud)

或更易读的国际海事组织:

restTime -= TimeSpan.FromSeconds(1);
Run Code Online (Sandbox Code Playgroud)

(我也习惯restTime = new TimeSpan(hours, min, 0);开始,可能。或者可能restTime = TimeSpan.FromHours(hours) + TimeSpan.FromMinutes(min);。)

您可能希望有一秒钟的字段:

private static readonly TimeSpan OneSecond = TimeSpan.FromSeconds(1);

...
restTime -= OneSecond;
Run Code Online (Sandbox Code Playgroud)