You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现双单选按钮激活状态下的闹钟通知循环重复触发

循环通知功能失效问题排查与修复

开发目标与现存问题

当前正在开发闹钟通知功能,预期实现效果:当两个指定单选按钮同时处于激活状态时,通知可按照预设逻辑循环重复触发,相关功能界面可参考随附截图。
目前运行程序后,点击触发按钮仅能弹出单条通知,无法达到循环重复触发的预期效果。

现有实现代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 15:27:04