如何停止 timer/change 系统 UI OnSleep Xamarin Android

How to stop a timer/change system UI OnSleep Xamarin Android

所以我有一个应用程序,按下按钮:启动计时器,循环浏览一条 (++) 数据并隐藏开始按钮,而是显示停止和下一步按钮。 我查看了消息中心,我认为它可以解决问题(这里是 link ),但它并没有完全解决问题。

如果应用程序有计时器 运行(也就是您按下开始按钮),然后通过按下 phone 上的主页按钮中断进程,应用程序运行正常并且应用程序隐藏stop/next 按钮并显示开始按钮和停止计时器。如果你根本没有开始这个过程(也就是你没有点击开始按钮)并且你点击了 phone 上的主页按钮,应用程序会抛出一个异常错误,因为我正在用消息中心 "doesn't need changing because it never changed"。有没有更好的方法来处理这种情况?

我可以在消息中心的应用程序状态下使用 if/else 语句吗??我卡住了。

App.xaml.cs

protected override void OnSleep()
    {
        // Handle when your app sleeps
        Debug.WriteLine("~~~~~~~~~~~~~~OnSleep~~~~~~~~~~~~~");
        MessagingCenter.Send<App>(this, "OnSleep");
    }

MainPage.xaml.cs

MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
            //shows start button instead of stop button
            StartGrid.IsVisible = true;
            //hides stop button
            StopNextGrid.IsVisible = false;

            //stops timer
            timer.Stop();
            timer = null;
            //stops sound
            startSound.Stop();
            stopSound.Play();
        });

只能看到部分代码,您应该在执行该方法之前检查您的定时器是否已初始化

当没有点击开始按钮时,需要检查timer是否初始化,才能进行下面的定时器操作

如果不想知道定时器是否初始化。你可以试试这个:

修改你的通知处理method.If你的计时器和按钮的状态没有改变,你不需要在notification.Here中做任何事情我使用timer作为一个判断。

MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
//shows start button instead of stop button
if (null != timer)
{
    StartGrid.IsVisible = true;
    //hides stop button
    StopNextGrid.IsVisible = false;
    //stops timer
    timer.Stop();
    timer = null;
    //stops sound
    startSound.Stop();
    stopSound.Play();
}
});