我不是在使用计时器,而是使用for循环来显示59秒的计时器,当它为0时,它将导航到父屏幕。 这是我的代码
Android和iOS设备都存在问题,当我将应用程序置于后台模式时,它会从59秒重新开始计时。我想要的是如果用户将应用置于后台模式,例如当计时器为40秒时,如果用户将应用置于前台模式,则在10秒后,计时器应显示30秒。计时器永远不要重启。 奇怪的是,有时它按预期工作正常。
使用我的OnAppearing方法
protected override void OnAppearing()
{
base.OnAppearing();
var dd = (EmployeePunchScreenModel)this.Content.BindingContext;
dd.IsbreakLoopTimer = false;
dd.SavedDuration = true;
Initialization = dd.ShowingTimer(59);
}
在ViewModel类中-
public async Task ShowingTimer(int second)
{
for (int _minute = 1; _minute >= 0; _minute--)
{
for (int _second = second; _second >= 0; _second--)
{
if (!SavedDuration)
{
break;
}
if (_second < 10)
{
TimerSec = Convert.ToString("0" + _second);
}
else
{
TimerSec = Convert.ToString(_second);
}
if (_second == 0)
{
ShouldRun = false;
IsbreakLoopTimer = true;
await App.Current.MainPage.Navigation.PopModalAsync();
MessagingCenter.Send<EmployeePunchScreenModel, string>(this, Constants.Global.NOTIFY_PUNCHCALL, "FromEmpPunchViewModel");
return;
}
if (_second <= 19)
{
TimerColor = "#FD3A2D";
}
else
{
TimerColor = "#000000";
}
if (IsbreakLoopTimer)
{
break;
}
await Task.Delay(1000);
}
}
}