Lablel.Text只会更新一次

时间:2019-01-16 20:14:17

标签: c# xamarin

我正在运行计时器并计时。计时器从按钮开始,标签显示时间。至少那是计划。 但是运行代码,label.Text将仅更新一次。它从6:00开始,将滴答一次到5:59,然后冻结为什么会发生这种情况?

我花了很多时间试图了解正在发生的事情。可变时间在变化,而label.Text没有变化。我在做错什么吗?

public partial class Running : ContentPage
{
    Timer timer;
    double seconds = 360;

    public Running()
    {
        InitializeComponent();
        button_run.Clicked += Button_Run_Clicked;
    }

    void Button_Run_Clicked(object sender, EventArgs e)
    {
        if (button_run.Text == "Start!")
        {
            button_run.Text = "Stop";
            timer = new Timer();
            timer.Interval = 100; // 100 milliseconds  
            timer.Elapsed += Timer_Elapsed;
            timer.Start();
        }

        else
        {
            button_run.Text = "Start!";
        }


    }

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        seconds -= 0.1;
        int minutes = (int)seconds / 60;
        int secs = (int)seconds % 60;
        string time = minutes.ToString() + ":" + secs.ToString();
        label_timer.Text = time; // the string time is changing!

        if (minutes != 0)
        {
            timer.Start();
        }
        else
        {
            timer.Stop();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

UI更新只能在主线程上完成

Device.BeginInvokeOnMainThread( () => {
  label_timer.Text = time;
});