计时器.未启动的已执行操作
本文关键字:执行 操作 启动 计时器 | 更新日期: 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计时器事件