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

WPF游戏开发问题:恢复Timer后TextBox未更新

解决Timer恢复后TextBox不更新的问题

嘿,我来帮你捋捋这个问题~你现在遇到的核心问题是:恢复Timer后,只有恢复瞬间更新了一次TextBox,之后Timer运行时TextBox没同步变化,这是因为你把更新逻辑只写在了Resume方法里,而没交给Timer的Tick事件来处理。

问题根源

你的Resume()方法里,启动Timer后手动减了一次timeJoc并更新了countdownJoc.Text,但这只是单次操作。Timer的本质是每隔指定时间触发一次Tick事件,持续的倒计时更新逻辑应该放在这个事件里,而不是只在启动时执行一次。

修复步骤

  1. 给Timer绑定Tick事件处理逻辑
    首先确保你的Timer已经关联了Tick事件,在事件里完成持续的倒计时更新:

    // 假设你的Timer是WPF的DispatcherTimer(如果是WinForms Timer,参数改为EventArgs即可)
    private void gameTime_Tick(object sender, EventArgs e)
    {
        if (timeJoc > 0)
        {
            timeJoc--;
            countdownJoc.Text = timeJoc.ToString();
        }
        else
        {
            gameTime.Stop();
            // 这里可以添加倒计时结束后的逻辑,比如提示游戏结束
        }
    }
    
  2. 简化Resume方法
    把Resume里的手动更新逻辑去掉,只保留启动Timer的操作(避免重复启动):

    public void Resume()
    {
        // 先判断Timer是否已经在运行,防止重复启动
        if (!gameTime.IsEnabled)
        {
            gameTime.Start();
        }
    }
    
  3. 额外排查点

    • 确认Timer的Interval属性设置正确(比如设为1000就是每秒触发一次Tick事件)
    • 检查countdownJoc控件是否正确引用,没有出现空引用的情况
    • 如果你用的是模态MessageBox,打开期间UI线程会被阻塞,Timer会暂停,恢复后Timer继续运行,只要Tick事件绑定正确,就会正常更新TextBox

这样修改后,当你点击恢复按钮启动Timer,Tick事件会每隔指定时间触发一次,持续更新timeJoc和TextBox的内容,就能解决同步问题啦~

内容的提问来源于stack exchange,提问作者JustStartedGio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:25:46