timer.Elapsed 动作未触发
timer.Elapsed actions not firing
我有一个按钮,我想在 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 语句,但实际上并没有启用我的按钮。 (这是通过在 visual studio 中使用断点观察到的)。
这里有我遗漏的东西吗?也许过去的事件没有按照我希望的方式工作?
如有任何帮助,我们将不胜感激。
计时器事件应该触发,但它无法启用 HTML 页面上的按钮,因为到那时请求已完成。
您应该将计时器移至页面上的 JavaScript。您仍然需要保留验证重试是否不频繁的逻辑,因为很容易绕过 JavaScript 或任何其他客户端验证。
如前所述,问题不是事件没有触发,而是无法通过我之前尝试的方法在客户端显示按钮已启用,因为计时器只存在服务器端。
但是
我找到了一种比想出一些草率的方法更简单的方法 Javascript :)
通过使用更新面板和 asp 计时器。通过在更新面板中放置一个 asp 计时器,并将计时器设置为默认禁用,然后我可以操纵计时器。然后,当计时器滴答作响时,它会通过更新面板自动更新:)
这里有很棒的代码示例:
ASP.NET Timer Event
我有一个按钮,我想在 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 语句,但实际上并没有启用我的按钮。 (这是通过在 visual studio 中使用断点观察到的)。
这里有我遗漏的东西吗?也许过去的事件没有按照我希望的方式工作?
如有任何帮助,我们将不胜感激。
计时器事件应该触发,但它无法启用 HTML 页面上的按钮,因为到那时请求已完成。
您应该将计时器移至页面上的 JavaScript。您仍然需要保留验证重试是否不频繁的逻辑,因为很容易绕过 JavaScript 或任何其他客户端验证。
如前所述,问题不是事件没有触发,而是无法通过我之前尝试的方法在客户端显示按钮已启用,因为计时器只存在服务器端。
但是 我找到了一种比想出一些草率的方法更简单的方法 Javascript :)
通过使用更新面板和 asp 计时器。通过在更新面板中放置一个 asp 计时器,并将计时器设置为默认禁用,然后我可以操纵计时器。然后,当计时器滴答作响时,它会通过更新面板自动更新:)
这里有很棒的代码示例: ASP.NET Timer Event