[英]Change Device.StartTimer() interval while running in Xamarin Forms
[英]Xamarin.Forms C# property not updating in Device.StartTimer
我想创建一个倒计时所选时间的应用程序。 但是我有一个奇怪的问题,我不知道我在做什么错。
这是我的计时器,每次选择器的属性更改时都会调用它。 当我选择时间时,代码仅删除1秒钟,然后不再更新。
Picker.PropertyChanged += (sender, e) =>
{
if (e.PropertyName == TimePicker.TimeProperty.PropertyName)
{
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
clockViewModel.SelectedTime = Picker.Time.Subtract(TimeSpan.FromSeconds(1));
return true;
});
}
};
我还尝试打印一个值,该值不断更新:
public int i = 0;
private void StartTimer()
{
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
clockViewModel.SelectedTime = Picker.Time.Subtract(TimeSpan.FromSeconds(1));
label.Text = i;
i++;
return true;
});
}
价值不断增加,所以我确定它正在做某事。
这是我的模型视图:
public class ClockViewModel : BaseViewModel
{
private TimeSpan selectedTime;
public TimeSpan SelectedTime
{
get => selectedTime;
set
{
selectedTime = value;
NotifyPropertyChanged();
}
}
}
有人知道我在这里做错了吗?
计时器在其他线程中运行。 如果要在UI所在的主线程上运行某些内容,则必须使用Device.BeginInvokeOnMainThread()
方法。 像这样:
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
Device.BeginInvokeOnMainThread (() =>
{
clockViewModel.SelectedTime = Picker.Time.Subtract(TimeSpan.FromSeconds(1));
label.Text = i;
});
i++;
return true;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.