为了账号安全,请及时绑定邮箱和手机立即绑定

如何停止计时器/更改系统 UI OnSleep Xamarin Android

如何停止计时器/更改系统 UI OnSleep Xamarin Android

C#
开心每一天1111 2022-06-12 15:14:51
所以我有一个按下按钮的应用程序:启动一个计时器,循环浏览一个(++)数据并隐藏开始按钮,而是显示一个停止和下一步按钮。我查看了消息中心,我认为它正在解决问题(这里是链接Xamarin.Forms 如何从另一个 CS 文件访问公共函数?)但它并没有完全解决问题。如果应用程序的计时器正在运行(也就是你点击了开始按钮),然后通过点击手机上的主页按钮来中断进程,则应用程序运行正常,应用程序隐藏停止/下一步按钮并显示开始按钮并停止计时器。如果您根本没有开始该过程(也就是您没有点击开始按钮)并且您点击了手机上的主页按钮,则应用程序会引发异常错误,因为我正在使用消息中心进行更改“不需要改变,因为它从未改变”。有没有更好的方法来处理这种情况?我可以在消息中心的应用状态下使用 if/else 语句吗?我被困住了。应用程序.xaml.csprotected override void OnSleep()    {        // Handle when your app sleeps        Debug.WriteLine("~~~~~~~~~~~~~~OnSleep~~~~~~~~~~~~~");        MessagingCenter.Send<App>(this, "OnSleep");    }MainPage.xaml.csMessagingCenter.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();        });
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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


当不点击开始按钮时,需要检查是否timer已初始化,以便进行下面的定时器操作。


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


在你的通知处理方法中修改。如果你的定时器和按钮的状态没有改变,你不需要在通知中做任何事情。这里我用 来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();

}

});


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号