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