我有一个必须每5分钟运行一次的方法,以便在gridview中显示最新数据。
我正在尝试使用System.Timers.Timer,以下是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
try
{
lblError.Text = "";
t = new System.Timers.Timer(300000);//every 5min = 300000
t.Enabled = true;
t.Elapsed += new ElapsedEventHandler(t_Elapsed);
if (!Page.IsPostBack)
{
//t = new System.Timers.Timer(300000);//every 5min = 300000
//t.Enabled = true;
//t.Elapsed += new ElapsedEventHandler(t_Elapsed);
floor = ddFloors.SelectedValue.ToString();
GenerateStatus();
}
}
catch (Exception ex)
{
lblError.Text = ex.Message;
}
}
void t_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
//Response.Redirect("Home.aspx");
floor = ddFloors.SelectedValue.ToString();
GenerateStatus();
}
catch (Exception ex)
{
lblError.Text = ex.Message;
}
}
问题是5分钟后它不会t_Elapsed。请注意,这应该始终保持完成,而不仅仅是一次。任何帮助吗?
答案 0 :(得分:2)
将您的计时器的 AutoReset
成员设置为true
你可以read more about AutoReset on MSDN。
击>
实际上true
是AutoReset
的默认值,可能您的问题是您的响应已发送且您的计时器超出范围。
答案 1 :(得分:1)
您需要更好地了解Web应用程序的客户端/服务器模型。当此事件触发时,页面早已呈现并发送到浏览器 如果你想做这样的事情,你将不得不使用javascript在客户端上做。像jQuery timers这样的jQuery插件和使用AJAX回调服务器的组合可以帮助你实现你想要的目标。
答案 2 :(得分:1)
您的计时器是一个局部变量,因此它超出了范围。
此外,这是一个ASP.NET页面,在服务器上创建Timers并不是一个好主意。
常规事件是否只需要在服务器上发生,或者您是否希望它在用户浏览器中执行某些操作?
如果您希望在服务器上发生重复事件,请参阅此博客文章,了解如何在ASP.NET中安排重复事件:
http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
如果您希望定期事件在用户浏览器中产生某些影响,则需要使用Javascript和/或JQuery从客户端而不是在服务器上触发事件
答案 3 :(得分:0)
你需要的是在客户端刷新,服务器功能只在页面加载时运行一次,使用meta或settimeout