Общие сведения об элементе управления Timer

Visual Studio 2010

Обновлен: Ноябрь 2007

Элемент управления ASP.NET AJAX Timer выполняет обратные передачи через определенные интервалы. Если используется элемент управления Timer с элементом управления UpdatePanel, то можно включить частичные обновления через определенные интервалы. Также можно использовать элемент управления Timer для передачи всей страницы.

В этом разделе содержатся следующие подразделы:

Элемент управления Timer используется для осуществления:

  • периодического обновления содержимого одного или нескольких элементов управления UpdatePanel без обновления всей веб-страницы;

  • запуска кода на сервере каждый раз, когда элемент управления Timer вызывает обратную передачу;

  • синхронной передачи всей веб-страницы на веб-сервер через определенные интервалы.

Элемент управления Timer является серверным элементом управления, который внедряет компонент JavaScript в веб-страницу. Компонент JavaScript инициирует обратную передачу от обозревателя, когда истекает интервал, определенный в свойстве Interval. Свойства для элемента управления Timer устанавливаются в коде, который выполняется на сервере, и эти свойства передаются компоненту JavaScript.

При использовании элемента управления Timer экземпляр класса ScriptManager должен быть включен в веб-страницу.

Когда обратная передача инициирована элементом управления Timer, элемент управления Timer вызывает событие Tick на сервере. Можно создать обработчик событий для события Tick, чтобы выполнять действия при отправке страницы серверу.

Установите свойство Interval для определения того, как часто будут происходить обратные передачи, и установите свойство Enabled, чтобы включить или выключить Timer. Свойство Interval определяется в миллисекундах, и по умолчанию его значение составляет 60 000 миллисекунд, или 60 секунд.

Bb398865.alert_note(ru-ru,VS.100).gifПримечание.

Присвоение небольшого значения свойству Interval элемента управления Timer может привести к значительному увеличению трафика к веб-серверу. Используйте элемент управления Timer для обновления содержимого только так часто, как это требуется.

Можно включить более одного элемента управления Timer в веб-страницу, если разные элементы управления UpdatePanel должны обновляться с разными интервалами. Также один экземпляр элемента управления Timer может быть триггером более чем для одного элемента управления UpdatePanel на веб-странице.

Использование элемента управления Timer внутри элемента управления UpdatePanel

Когда элемент управления Timer включен в элемент управления UpdatePanel, элемент управления Timer автоматически действует как триггер для элемента управления UpdatePanel. Можно переопределить это поведение путем задания для свойства ChildrenAsTriggers элемента управления UpdatePanel значения false.

Для элементов управления Timer внутри элемента управления UpdatePanel временной компонент JavaScript заново создается, только когда заканчивается текущая обратная передача. Таким образом, временной интервал не начинается, пока страница не выполнит обратную передачу полностью. Например, если для свойства Interval задано значение в 60 000 миллисекунд (60 секунд), но выполнение текущей обратной передачи занимает 3 секунды, то следующая обратная передача произойдет через 63 секунды.

В следующем примере показано, как включить элемент управления Timer в элемент управления UpdatePanel.

<asp:ScriptManager runat="server" id="ScriptManager1" />
<asp:UpdatePanel runat="server" id="UpdatePanel1" 
    UpdateMode="Conditional">
  <contenttemplate>
    <asp:Timer id="Timer1" runat="server"
      Interval="120000" 
      OnTick="Timer1_Tick">
    </asp:Timer>
  </contenttemplate>
</asp:UpdatePanel>

Использование элемента управления Timer вне элемента управления UpdatePanel

Когда элемент управления Timer находится вне элемента управления UpdatePanel, требуется явно определить элемент управления Timer как триггер для элемента управления UpdatePanel, который нужно обновить.

Если элементы управления Timer находятся вне элемента управления UpdatePanel, то временной компонент JavaScript продолжает выполняться и при выполнении обратной передачи. Например, если для свойства Interval задано значение в 60 000 миллисекунд (60 секунд) и выполнение текущей обратной передачи занимает 3 секунды, то следующая обратная передача произойдет через 60 секунд. Пользователь будет видеть обновленное содержимое в элементе управления UpdatePanel только в течение 57 секунд.

Для свойства Interval необходимо установить значение, позволяющее совершить полную асинхронную обратную передачу до инициализации следующей обратной передачи. Если новая обратная передача инициируется во время обработки предыдущей обратной передачи, то инициированная ранее передача отменяется.

В следующем примере показывается, как использовать элемент управления Timer вне элемента управления UpdatePanel.

<asp:ScriptManager runat="server" id="ScriptManager1" />
<asp:Timer ID="Timer1" runat="server" Interval="120000" 
  OnTick="Timer1_Tick">
</asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" 
        EventName="Tick" />
    </Triggers>
    <ContentTemplate>
      <asp:Label ID="Label1" runat="server" ></asp:Label>
  </ContentTemplate>
</asp:UpdatePanel>

В следующем примере кода показан элемент управления UpdatePanel, отображающий сформированную случайным образом цену акции и время формирования цены акции. По умолчанию, элемент управления Timer обновляет содержимое элемента управления UpdatePanel каждые 10 секунд. Пользователь может решить обновлять цену акций каждые 10 секунд, каждые 60 секунд, или же вообще не обновлять. Если пользователь решает не обновлять цену акции, то свойству Enabled присваивается значение false.

<%@ Page Language="C#" AutoEventWireup="true" %>

<!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 id="Head1" runat="server">
    <title>Timer Example Page</title>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            OriginalTime.Text = DateTime.Now.ToLongTimeString();
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            StockPrice.Text = GetStockPrice();
            TimeOfPrice.Text = DateTime.Now.ToLongTimeString();
        }

        private string GetStockPrice()
        {
            double randomStockPrice = 50 + new Random().NextDouble();
            return randomStockPrice.ToString("C");
        }

        protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
        {
            Timer1.Enabled = true;
            Timer1.Interval = 10000;
        }

        protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
        {
            Timer1.Enabled = true;
            Timer1.Interval = 60000;
        }

        protected void RadioButton3_CheckedChanged(object sender, EventArgs e)
        {
            Timer1.Enabled = false;
        }

</script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="10000" />

        <asp:UpdatePanel ID="StockPricePanel" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" />
        </Triggers>
        <ContentTemplate>
            Stock price is <asp:Label id="StockPrice" runat="server"></asp:Label><BR />
            as of <asp:Label id="TimeOfPrice" runat="server"></asp:Label>  
            <br />

        </ContentTemplate>
        </asp:UpdatePanel>
        <div>
        <br />
        Update stock price every:<br />
        <asp:RadioButton ID="RadioButton1" AutoPostBack="true" GroupName="TimerFrequency" runat="server" Text="10 seconds" OnCheckedChanged="RadioButton1_CheckedChanged" /><br />
        <asp:RadioButton ID="RadioButton2" AutoPostBack="true" GroupName="TimerFrequency" runat="server" Text="60 seconds" OnCheckedChanged="RadioButton2_CheckedChanged" /><br />
        <asp:RadioButton ID="RadioButton3" AutoPostBack="true" GroupName="TimerFrequency" runat="server" Text="Never" OnCheckedChanged="RadioButton3_CheckedChanged" />
        <br />
        Page loaded at <asp:Label ID="OriginalTime" runat="server"></asp:Label>
        </div>
    </form>
</body>
</html>


Учебники

Ключевые серверные классы для элемента управления Timer показаны в следующей таблице.

Timer

Выполняет асинхронные или синхронные обратные передачи веб-страницы через определенный интервал.

Показ: