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

C# QuizApp计时结束后ShowQuestion()方法无法正常触发

问题分析与修复:WinForms QuizApp计时器结束后无法显示下一题

问题描述

在C# WinForms开发的QuizApp中,ShowQuestion()方法在点击选项按钮时能正常切换题目,但计时器计时结束后,无法触发下一题显示。即使将自定义的CustomTimeBox替换为MessageBox,问题仍然存在。

核心问题

对比按钮点击的处理逻辑,计时器超时的Timer_Tick方法存在两个关键缺失:

  1. 未递增题目索引:按钮点击时会先执行questionIndex++再调用ShowQuestion(),而计时器超时逻辑中没有这一步,导致ShowQuestion()仍然显示当前题目,视觉上无变化。
  2. 未重启计时器:按钮点击完成后会重新启动计时器,而超时逻辑中调用ShowQuestion()后没有启动计时器,下一题无法进入计时流程。
    另外,CustomTimeBox在每次Tick事件中都实例化,属于不必要的资源浪费。

修复后的代码

private void Timer_Tick(object sender, EventArgs e)
{
    time -= 1;
    lblTimer.Text = $"Kalan süre: {time} saniye";
    if (time == 0)
    {
        timer.Stop();
        // 超时未答,标记为错误(可根据需求调整)
        countIncorrect++;
        // 递增题目索引,切换到下一题
        questionIndex++;
        
        CustomTimeBox customTimeBox = new CustomTimeBox();
        if (customTimeBox.ShowDialog() == DialogResult.OK)
        {
            ShowQuestion();
            // 重新启动计时器,为下一题计时
            timer.Start();
        }
    }
}

关键修复点说明

  • 将CustomTimeBox的实例化移到time == 0的分支内,避免不必要的对象创建
  • 超时后先更新答题统计(countIncorrect++)并递增questionIndex,确保ShowQuestion()加载下一题
  • 调用ShowQuestion()后重启计时器,保证下一题的计时功能正常运行
  • 如果业务需求中超时不算错误,可移除countIncorrect++代码

验证要点

  1. 测试计时器超时后,是否正确切换到下一题
  2. 确认下一题的计时器正常开始倒计时
  3. 所有题目完成后,是否正确显示结束统计弹窗

内容的提问来源于stack exchange,提问作者Yunus Emre Çağan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:24:51