如何实现双单选按钮激活状态下的闹钟通知循环重复触发
循环通知功能失效问题排查与修复
开发目标与现存问题
当前正在开发闹钟通知功能,预期实现效果:当两个指定单选按钮同时处于激活状态时,通知可按照预设逻辑循环重复触发,相关功能界面可参考随附截图。
目前运行程序后,点击触发按钮仅能弹出单条通知,无法达到循环重复触发的预期效果。
现有实现代码
private void Button_Clicked(object sender, EventArgs e) { if (Radio_Msg.IsChecked) { CrossToastPopUp.Current.ShowToastWarning("Alarme"); } if (Radio_Notif.IsChecked) { CrossLocalNotifications.Current.Show("Miguel", "Módulo 19 – Tecnologias de Acesso a Base de Dados"); } if (Radio_Msg.IsChecked && RadioRepetir == true) { CrossToastPopUp.Current.ShowToastMessage("Tesddddte"); Thread.Sleep(500); CrossToastPopUp.Current.ShowToastMessage("Teste"); } }
失效原因定位
- 线程阻塞问题:在UI主线程中直接调用
Thread.Sleep(500),不仅会造成界面无响应,还会导致弹窗事件被系统快速回收,无法正常呈现连续弹出的效果 - 循环逻辑缺失:当前代码仅在单次按钮点击的流程内执行2次弹窗操作,没有构建可按周期反复执行的调度机制,无法实现持续循环触发的效果
- 状态判定漏洞:代码中
RadioRepetir == true的判断没有绑定对应单选按钮的实际选中属性,容易出现状态读取失效、判定分支不触发的问题
可落地修复方向
- 修正状态判定逻辑:将循环开关的判断直接关联对应单选按钮的
IsChecked属性,替代硬编码的布尔值判断 - 替换阻塞式延时逻辑:将UI线程的
Thread.Sleep替换为异步非阻塞的延时实现,在独立线程中执行循环弹窗逻辑,同时增加循环退出的判定条件,避免无限循环造成内存泄漏 - 后台触发适配:如果需要应用退到后台后仍能触发循环通知,需要使用本地通知库自带的定时重复调度接口,不能依赖前台页面存活触发弹窗——因为应用退到后台后前台线程会被系统快速回收,前台驱动的循环弹窗会直接中断
内容的提问来源于stack exchange,提问作者Juntrubal
相关产品推荐
相关产品推荐

