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

Xamarin.Forms倒计时计时器暂停重启后快慢不均问题求助

Xamarin.Forms倒计时计时器暂停后重启快慢不均的问题解决

问题根源

  1. 重复创建计时器实例:每次点击「开始/暂停」按钮调用RunTimer时,都会新建一个Device.StartTimer实例。多个计时器同时运行,都会修改counter变量,导致倒计时速度叠加,出现每秒跳多次的情况。
  2. 变量大小写错误:C#是大小写敏感语言,代码中Value和value混用,会导致逻辑判断失效。
  3. 计时器返回逻辑混乱:原代码中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:25:20