更新:我已经更准确地表述了这个问题
我以 Xamarin 形式 (Android) 编写了一个带有计时器的应用程序,并且我已在 MainPage.cs 类中编写了所有内容。直到现在,只有当我关闭应用程序(发送到后台)并再次打开它时,一切才能正常工作。问题是,当我再次打开应用程序时,计时器不再运行,但它只显示打开应用程序时的剩余时间。计时器没有运行。我已经读到 Xamarin Forms 在这种情况下调用 OnSleep、OnResume 方法,您应该在那里编程以再次正确检索计时器并继续运行。我对它的经验很少,经过长时间的研究,找不到任何好的东西。谁知道定时器在打开后如何检索并再次运行。非常感谢
这是我在 MainPage 中的计时器方法
public void StartCountdown()
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
if (cancel == true)
{
tokenSource.Cancel();
}
task = Task.Run(async () =>
{
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
restTime -= TimeSpan.FromSeconds(1);
if (cancel == true)
{
return false;
}
if (restTime == zero)
{
StartDownload();
return false;
}
else
{
Device.BeginInvokeOnMainThread(() =>
{
ActivateElements(false);
});
return true;
}
});
}, token);
}
如何在 App.cs 中实现定时器方法,有必要吗?
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override void OnStart()
{
}
protected override void OnSleep()
{
}
protected override void OnResume()
{
}
}
答案 0 :(得分:1)
在您的页面中创建公共方法以暂停/恢复计时器,然后在您的 App 类中
protected override void OnSleep()
{
((MainPage)MainPage).SomePublicMethodToPauseTimer();
}
protected override void OnResume()
{
((MainPage)MainPage).SomePublicMethodToResumeTimer();
}