timer.Elapsed动作未触发

时间:2015-06-22 19:31:57

标签: c# asp.net timer

我有一个按钮,我希望在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中使用断点来观察的。)

我在这里缺少什么吗?也许过去的事件不按我想要的方式运作?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

应该触发计时器事件,但由于该点已完成请求,因此无法在HTML页面上启用按钮。

您应该在页面上将计时器移动到JavaScript。您仍然需要保留逻辑,以验证重试不是更频繁,因为它很容易绕过JavaScript或任何其他客户端验证。

答案 1 :(得分:0)

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

BUT 我找到了一个比提出一些草率的Javascript更简单的方法:)

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

这里有很棒的代码示例: ASP.NET Timer Event