我应该在哪里放置一个每5分钟调用一次方法的计时器?
我把它放在MasterPage中,但每次加载使用此MasterPage的页面时都会调用,但我想每5分钟调用一次
我在MasterPage中使用此代码
<body>
<form id="form1" runat="server">
<div id="divNews" class="news" runat="server"></div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<ContentTemplate>
<div class="divTit">
<table style=" width:100%">
<tr style=" width:100%; text-align:right;">
<td style=" width:100%;"><!--Inbox-->
<asp:LinkButton CssClass="lblMainMenu1" runat="server" ID="lblInbox" OnClick="inbox_Click"></asp:LinkButton>
<asp:Label Text="Inbox :" runat="server" CssClass="lblMainMenu2"></asp:Label>
</td>
</tr>
</table>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger controlid="timer" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer Interval="1" ID="timer" OnTick="timer_Tick" runat="server"></asp:Timer>
<div id="body" class="divBody">
<asp:ContentPlaceHolder id="head" runat="server"></asp:ContentPlaceHolder>
<asp:ContentPlaceHolder id="contentMain" runat="server"></asp:ContentPlaceHolder>
</div>
</form>
</body>
答案 0 :(得分:0)
我不会在页面内执行此操作。正如您所见,您无法以这种方式可靠地创建长时间运行的计划任务。
实现这一目标的最佳方式实际上取决于您想要做的事情。
如果您希望每五分钟更新浏览器中的页面,则可以在JavaScript中设置计时器并执行AJAX请求以检索更新的内容。或者 - 更简单但更不干净 - 您可以使用HTTP-equiv meta attribute每五分钟刷新整个页面。但是,正如链接所述,这会破坏一些可访问性规则。此外,如果您有一个用户正在填写的表单,那么当页面刷新时,他们输入的任何信息都将丢失。
如果您尝试触发一些非特定于用户的服务器端任务,您可以使用以下几种不同的路径:
创建一个在服务器上运行的Windows服务(可能是您的Web服务器,但它可以在任何地方)。您可以直接在服务中每隔五分钟放置一次所需的代码,或使用WebClient之类的内容从您的网站请求页面,然后执行您需要的任何任务。
创建一个控制台应用程序,PowerShell脚本等,它使用WebClient检索页面,并将其添加到Windows task scheduler以使其每隔几分钟运行一次。这样做的好处是不需要你创建服务,如果这是你不熟悉或不熟悉的事情。
使用wget for Windows之类的实用程序,而不是编写脚本或控制台应用程序。使用上面提到的任务调度程序每隔几分钟运行一次,将所需的URL指定为命令行参数。这可能是最简单的,但放弃了其他两个选项提供的一些灵活性。
**更新** 如果您只是想要定期更新页面中的某些内容(如检查消息等),则a very simple tutorial that doesn't require you to create any JavaScript here。
出于存档完整性的目的,这里是代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Update Panel and Timer</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer runat="server" id="UpdateTimer" interval="5000"
ontick="UpdateTimer_Tick" />
<asp:UpdatePanel runat="server" id="TimedPanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="UpdateTimer"
eventname="Tick" />
</Triggers>
<ContentTemplate>
<asp:Label runat="server" id="lbldatetime" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
在代码隐藏中:
protected void UpdateTimer_Tick(object sender, EventArgs e)
{
lbldatetime.Text = DateTime.Now.ToString();
}