Елемент управління Timer в AJAX Framework - все про IT та програмування
Written on 21 Листопада 2008 . Posted in ASP.NET
ЗМІСТ
Виконуємо постбек кожні n мілісекунд
Елемент управління Timer створений для того, щоб періодично викликати постбек. Його властивість Interval вказує кількість мілісекундів до запуску постбека. Під час постбеку викликається подія Tick Timer.
І це все! Елемент керування Timer за промовчанням викликає постбек для всієї сторінки, але вам необхідно, щоб він викликав частковий постбек. Це може бути здійснено двома шляхами:
- Шляхом розташування елемента Timer разом із UpdatePanel. Коли спрацює Timer він викликає постбек, але оскільки він знаходиться в UpdatePanel, постбек стає частковим.
- Шляхом розташування елемента Timer поза UpdatePanel, але при цьому додавши його як тригер UpdatePanel. Перегляньте статтю "Використовуємо UpdatePanel" щодо виклику часткового постбека з UpdatePanel, використовуючи при цьому елементи керування, що знаходяться за межами UpdatePanel.
- Елемент управління Label, названий StockPrice, який використовується для відображення котирувань акції компанії.
- Елемент управління Image, який відображає або картинку з мішком грошей, або збанкрутілого хлопця, залежно від поточних котирувань акції. (Трохи гумору не завадить.)
- Інший елемент керування Label, названий CurrentPanelTime, відображає час останнього оновлення UpdatePanel.
На даний момент декларативна розмітка вашої сторінки має виглядати приблизно так:
Додайте метод, названий UpdateStockPrice, до сторінки класу code-behind. Даному методу необхідно визначити поточне котирування акції, відобразити його в елементі StockPrice Label та завантажити відповідне зображення. Як видно з нижченаведеного коду, котирування акції просто є навмання обраним числом в інтервалі від 0 до 100. Більше того, властивість ForeColor елемента StockPrice встановлено в червоному кольорі (Red) і відображається зображення з банкрутом у випадку, якщо котирування акції менше ніж $50.00; властивість ForeColor встановлено у зеленому кольорі (Green) і відображається зображення з мішком грошей у разі, якщо ціна акції більша або дорівнює $50.00.
Необхідно викликати метод UpdateStockPrice у випадку, якщо сторінка була вперше завантажена, а також, коли викликається подія Tick елемента Timer. Створіть подію Page_Load у класі code-behind та встановіть властивість Text обох елементів Label у поточне значення часу. Також викличте метод UpdateStockPrice, якщо Page.IsPostback дорівнює значенню False (тобто сторінка відвідана вперше, а не після постбека):
Далі створіть обробник для події Tick елемента Timer і, перебуваючи там, викличте метод UpdateStockPrice:
Маючи цю декларативну розмітку та код, відвідайте сторінки за допомогою браузера. Щоп'ять секунд Timer буде викликати частковий постбек, виробляється поточне котирування акції, і екран оновлюється (точніше тільки частина екрану). Наступне зображення показує сторінку під час першого візиту. Зауважте, що час останнього повноцінного постбека(початкове завантаження сторінки) та час останнього оновлення UpdatePanel збігаються.

Зауважте, що час, показаний у UpdatePanel, на п'ять секунд більше, ніж час завантаження сторінки.

Запуск та зупинка елемента керування Timer
За замовчуванням, елемент керування Timer починає відлік з моменту завантаження сторінки, і продовжує викликати постбеки кожні n мілісекунд. Якщо вам необхідно зупинити відлік в елементі Timer, у вас є два шляхи:
- Вимкнути Timer на серверній стороні, або
- Зупинити Timer на стороні клієнта.
Щоб реалізувати серверну функціональність, я доповнив приклад, який використовує елемент Timer шляхом додавання елемента Button в UpdatePanel. Я також встановив властивість Text даного елемента значення "Pause" і створив обробник події Click. В обробнику події я змінюю значення властивості Enabled елемента керування Timer і оновлюю властивість Text елемента Button, змінюючи його з "Pause" на "Resume" при зупинці таймера, або з "Resume" назад на "Pause" - при його запуску. Я також викликаю метод UpdateStockPrice при запуску таймера, тим самим відновлення елементу Timer миттєво оновлює котирування акції (на відміну від випадку, коли нам довелося б чекати п'ять секунд до того, як буде задіяно елемент Timer).