0

5分ごとにメソッドを呼び出すタイマーはどこに置くべきですか?

私はそれをMasterPageに入れましたが、このMasterPageを使用するページをロードするたびに呼び出しますが、5分ごとに呼び出したいです

私はマスターページでこのコードを使用します

<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

ページ内でこれを行うことはありません。これまで見てきたように、この方法では長時間実行されるスケジュールされたタスクを確実に作成することはできません。

これを行う最善の方法は、正確には、何をしたいかによって異なります。

ブラウザー内のページを 5 分ごとに更新する場合は、JavaScript でタイマーを設定し、AJAX 要求を実行して更新されたコンテンツを取得できます。または、より簡単ですが、きれいではありませんが、HTTP-equiv メタ属性を使用して、5 分ごとにページ全体を更新することもできます。ただし、リンクに記載されているように、これはいくつかのアクセシビリティ規則に違反しています。また、ユーザーが入力するフォームがある場合、ユーザーが入力した情報は、ページが更新されると失われます。

ユーザー固有ではないサーバー側のタスクをトリガーしようとしている場合は、いくつかの異なるルートを使用できます。

  1. サーバー上で実行される Windows サービスを作成します (おそらく Web サーバーですが、どこにでもある可能性があります)。5 分ごとに実行する必要があるコードをサービスに直接配置するか、WebClientなどを使用してサイトからページを要求し、必要なタスクを実行することができます。

  2. WebClient を使用してページを取得するコンソール アプリ、PowerShell スクリプトなどを作成し、それをWindows タスク スケジューラに追加して数分ごとに実行します。これには、慣れていない、または慣れていないサービスを作成する必要がないという利点があります。

  3. スクリプトやコンソール アプリを作成する代わりに、Windows 用の wgetなどのユーティリティを使用します。上記のタスク スケジューラを使用して、目的の URL をコマンド ライン パラメータとして指定し、数分ごとに実行します。これはおそらく最も簡単ですが、他の 2 つのオプションが提供する柔軟性の一部を放棄します。

**更新** あなたが述べたように、ページ内のコンテンツを定期的に更新したい場合 (メッセージのチェックなど)、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 に答える