我正在运行计时器并计时。计时器从按钮开始,标签显示时间。至少那是计划。 但是运行代码,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();
}
}
}
答案 0 :(得分:3)
UI更新只能在主线程上完成
Device.BeginInvokeOnMainThread( () => {
label_timer.Text = time;
});