Xamarin.Forms倒计时计时器暂停重启后快慢不均问题求助
Xamarin.Forms倒计时计时器暂停后重启快慢不均的问题解决
问题根源
- 重复创建计时器实例:每次点击「开始/暂停」按钮调用
RunTimer时,都会新建一个Device.StartTimer实例。多个计时器同时运行,都会修改counter变量,导致倒计时速度叠加,出现每秒跳多次的情况。 - 变量大小写错误:C#是大小写敏感语言,代码中
Value和value混用,会导致逻辑判断失效。 - 计时器返回逻辑混乱:原代码中
return true/false的位置错误,无法正确控制计时器的启停。
修正方案
只维护一个计时器实例,通过状态变量控制启停,同时修复变量和逻辑问题:
修正后的完整代码
// 类级别变量 bool isTimerRunning = false; int counter = 120; private void Start_Pause(object sender, EventArgs e) { if (!isTimerRunning) { // 仅在未运行时启动计时器 isTimerRunning = true; Device.StartTimer(TimeSpan.FromSeconds(1), () => { if (isTimerRunning) { counter--; // 倒计时结束后重置 if (counter <= 0) { counter = 120; } // 直接用TimeSpan显示倒计时,避免依赖系统时间 MainText.Text = TimeSpan.FromSeconds(counter).ToString("mm:ss"); return true; // 保持计时器运行 } return false; // 停止计时器 }); } else { // 暂停:标记状态,让计时器在下一轮回调时停止 isTimerRunning = false; } }
关键优化点
- 单一计时器实例:用
isTimerRunning标记状态,避免重复启动多个计时器。 - 简化逻辑:将计时器启停逻辑整合到按钮点击事件中,减少冗余方法。
- 更可靠的时间显示:用
TimeSpan.FromSeconds(counter)生成倒计时文本,不受系统时间调整影响,比依赖DateTime更稳定。
内容的提问来源于stack exchange,提问作者RObertos12
相关产品推荐
相关产品推荐

