计时器.未启动的已执行操作

本文关键字:执行 操作 启动 计时器 | 更新日期: 2023-09-27 17:59:14

我有一个按钮,我想在4次提交尝试失败后禁用它。我正在使用System.Timers计时器计数到15秒,然后在这15秒后尝试重新启用按钮。

这是我的代码:

 if (SessionManager.getRetries > 3)
    {
        Message.Text = "Too many failed attempts. Please retry in 15 seconds.";
        buttonOne.Enabled = false;
        HttpContext.Current.Session["RetryCount"] = 0;
        System.Timers.Timer myTimer = new System.Timers.Timer();
        myTimer.AutoReset = false;
        myTimer.Interval = 15000;
        myTimer.Enabled = true;
        myTimer.Start();
        myTimer.Elapsed += myTimer_Elapsed;
    }
}
void myTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    buttonOne.Enabled = true;
}

到目前为止,我的程序将正确计算尝试提交的次数(SessionManager.getRetries)。在4次尝试失败后,它将输入此if语句。然后,它创建计时器,设置间隔,启动计时器,并知道所经过的时间。它甚至转到buttonOne.Enabled=true语句,但它实际上并没有启用我的按钮。(这是通过在visualstudio中使用断点观察到的)。

我这里缺了什么吗?也许过去的事件没有按照我希望的方式进行?

如有任何帮助,我们将不胜感激。

计时器.未启动的已执行操作

Timer事件应该被触发,但它无法在HTML页面上启用按钮,因为此时请求已经完成。

您应该将计时器移动到页面上的JavaScript。您仍然需要保留验证重试频率不会更高的逻辑,因为绕过JavaScript或任何其他客户端验证都非常容易。

如前所述,问题不是事件没有触发,而是无法通过我之前尝试的方法在客户端显示按钮已启用,因为计时器只存在于服务器端。

但是我发现了一种比编写一些草率的Javascript更容易的方法:)

通过使用更新面板和asp定时器。通过在更新面板中放置一个asp计时器,并将计时器设置为默认禁用状态,我就可以操作计时器了。然后,当计时器滴答作响时,它会通过更新面板自动更新:)

这里有很棒的代码示例:ASP.NET计时器事件