0

Where should i put a timer that call a method every 5 minutes ?

i put it in MasterPage but call every time that i load a page that use this MasterPage but i want to call just every 5 minutes

i use this code in 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>
4

1 回答 1

0

我不会在一个页面内这样做。如您所见,您无法以这种方式真正可靠地创建长时间运行的计划任务。

做到这一点的最佳方法实际上取决于您想要做什么。

如果您希望每五分钟更新一次浏览器内的页面,您可以在 JavaScript 中设置一个计时器并执行 AJAX 请求以检索更新的内容。或者 - 更简单,但不太干净 - 您可以使用HTTP-equiv 元属性每五分钟刷新一次整个页面。但是,正如链接所述,这违反了一些可访问性规则。此外,如果您有一个用户正在填写的表单,那么当页面刷新时,他们输入的任何信息都将丢失。

如果您尝试触发一些非用户特定的服务器端任务,您可以使用一些不同的路线:

  1. 创建一个在服务器上运行的 Windows 服务(可能是您的 Web 服务器,但它可以在任何地方)。您可以将需要每五分钟运行一次的代码直接放入服务中,或者使用WebClient之类的东西从您的站点请求一个页面,然后执行您需要的任何任务。

  2. 创建使用 WebClient 检索页面的控制台应用程序、PowerShell 脚本等,并将其添加到Windows 任务计划程序以使其每隔几分钟运行一次。这样做的好处是不需要您创建服务,如果这是您不熟悉或不熟悉的东西。

  3. 与其编写脚本或控制台应用程序,不如使用wget for Windows等实用程序。使用上面提到的任务计划程序每隔几分钟运行一次,将所需的 URL 指定为命令行参数。这可能是最简单的,但放弃了其他两个选项提供的一些灵活性。

** 更新 ** 如果您只想按照您所说的定期更新页面中的某些内容(检查消息等),这里有一个非常简单的教程,不需要您在此处创建任何 JavaScript

出于存档完整性的目的,以下是代码:

<%@ 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();
}
于 2013-01-25T18:36:45.177 回答