2010-11-16 3 views
0

У меня есть метод, который должен запускаться каждые 5 минут, чтобы показывать последние данные в gridview.System.Timers.Timer не работает каждые 5 минут

Я экспериментировал с System.Timers.Timer и следующий мой код:

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      lblError.Text = ""; 

      t = new System.Timers.Timer(300000);//every 5min = 300000 
      t.Enabled = true; 
      t.Elapsed += new ElapsedEventHandler(t_Elapsed); 

      if (!Page.IsPostBack) 
      { 
       //t = new System.Timers.Timer(300000);//every 5min = 300000 
       //t.Enabled = true; 
       //t.Elapsed += new ElapsedEventHandler(t_Elapsed); 

       floor = ddFloors.SelectedValue.ToString(); 
       GenerateStatus(); 
      } 
     } 
     catch (Exception ex) 
     { 
      lblError.Text = ex.Message; 
     } 
    } 


    void t_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     try 
     { 
      //Response.Redirect("Home.aspx"); 
      floor = ddFloors.SelectedValue.ToString(); 
      GenerateStatus(); 
     } 
     catch (Exception ex) 
     { 
      lblError.Text = ex.Message; 
     } 
    } 

проблема заключается в том, что после того, как 5minutes она не собирается t_Elapsed. Обратите внимание, что это должно постоянно выполняться не только раз. любая помощь PLS?

+0

Это немного не по теме, но есть ли причина, по которой ваш не использующий кеш с немедленным истечением срока действия для выполнения этой операции. Это обеспечит аналогичный эффект и, возможно, уменьшит ваши хиты, поскольку он будет обновлять кеш, только если кто-то сделает запрос на контент. – Zachary

ответ

1

Вам необходимо лучше понять модель клиент-серверных веб-приложений. К моменту возникновения этого события страница уже давно отображается и отправляется в браузер.
Если вы хотите сделать что-то подобное, вам нужно будет сделать это на клиенте с помощью javascript. Комбинация плагина jQuery типа jQuery timers и использование обратного вызова AJAX на сервере должны помочь вам достичь того, чего вы хотите.

+0

Можете ли вы помочь мне, указав образец кода или учебник. Мне нужно, чтобы при обновлении страницы (каждые 5 минут) он прочитал выбранное значение выпадающего списка и выполнил метод C# – IanCian

2

Установите AutoReset элемент таймер для true

Вы можете read more about AutoReset on MSDN.

На самом деле true по умолчанию для AutoReset, скорее всего, ваша проблема в том, что ваш ответ отправляется и таймер выходит из области видимости.

0

что вам нужно сделать обновление в клиентском, функции сервера просто запустить один раз, когда загрузка страницы, используйте мету или SetTimeout

1

Вашего таймером является локальным переменным и поэтому он выходит из области видимости.

Кроме того, это страница ASP.NET, и создание Таймеров на сервере - не очень хорошая идея.

Является ли обычное событие чем-то, что должно произойти только на сервере или вы хотите что-то сделать в браузере пользователей?

Если вы хотите, повторяющееся событие произойдет на сервере, увидеть это сообщение в блоге о планировании повторяющихся событий в ASP.NET:

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

Если вы хотите, чтобы повторяющееся событие, чтобы иметь какой-то эффект в браузерам пользователей, вам нужно использовать Javascript и/или JQuery для запуска события со стороны клиента, а не на сервере.

+0

10x для вашего сообщения, действительно ценят. можете ли вы дать мне больше информации о том, как CacheItemRemoved() и AddTask() в приведенной выше ссылке. – IanCian

Смежные вопросы