2010-11-16 96 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; 
     } 
    } 

問題是,5分鐘後不會t_Elapsed。請注意,這應該在任何時候都不停地進行,而不僅僅是一次。有什麼幫助嗎?

+0

這是一個有點偏離的主題,但是有沒有什麼原因爲什麼你不使用緩存非滑動到期執行此操作。它會提供類似的效果,可能會降低您的點擊次數,因爲如果有人提出內容請求,它只會更新緩存。 – Zachary 2010-11-16 14:26:42

回答

1

您需要更好地瞭解Web應用程序的客戶端/服務器模型。當這個事件觸發時,頁面已經被渲染並且被髮送到瀏覽器。
如果你想做這樣的事情,你將不得不在客戶端上使用javascript來完成。像jQuery timers這樣的jQuery插件和使用AJAX回調服務器的組合應該可以幫助你實現你想要的。

+0

你可以請示例代碼或教程來指導我。我需要在頁面刷新(每5分鐘)它會讀取下拉列表中選定的值並執行一個c#方法 – IanCian 2010-11-16 14:33:13

2

設置你的計時器的 AutoReset成員 true

你可以 read more about AutoReset on MSDN

其實trueAutoReset默認的,可能你的問題是,你的響應發送,你的計時器超出範圍。

0

你需要的是做刷新在客戶方,服務器功能只運行一次,當頁面加載,使用元或setTimeout的

1

你的計時器是一個局部變量,因此它超出範圍。

此外,這是一個ASP.NET頁面,並在服務器上創建計時器不是一個好主意。

定期事件是需要在服務器上發生的事情,還是您希望它在用戶瀏覽器中執行某些操作?

如果你想重複發生的事件在服務器上發生的,看到這個博客帖子大約在ASP.NET調度重複事件:

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

如果你想重複事件必須在一定的影響用戶瀏覽器,您需要使用Javascript和/或JQuery觸發事件從客戶端而不是在服務器上

+0

10倍爲您的帖子真正感激。你能否給我更多關於如何在上面提供的鏈接中的CacheItemRemoved()和AddTask()的信息。 – IanCian 2010-11-16 14:46:51