我正在asp.net網站上實現自動刷新功能。如何在會話結束後刪除定時器?
用戶在網站上進行登錄,並且如果他轉到具有需要刷新的表的特定頁面,則會創建刷新表的計時器。
但是當用戶註銷或會話過期時,定時器繼續運行。現在爲X用戶乘以這個值,並且我們將在服務器上運行X定時器。
當不再需要定時器時,擺脫定時器的最佳方式是什麼?
到目前爲止,我的代碼如下:
protected static System.Timers.Timer _timer;
protected void Page_Load(object sender, EventArgs e)
{
...
ServiceStatus serv = new ServiceStatus();
OutSubscricoesInfoV2 subscr = new OutSubscricoesInfoV2();
serv = StreamerUtils.GetSubscricoesStreamer(ref subscr);
if (serv != null && serv.success)
{
StreamerUtils.StreamerState strState = StreamerUtils.GetStreamerState(subscr);
if (strState != null && strState.IsActive)
{
startAutoRefresh();
}
}
}
private void startAutoRefresh()
{
if (Session["RefreshTimer"] == null)
{
_timer = new System.Timers.Timer(10000);
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Enabled = true;
Session["RefreshTimer"] = _timer;
}
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//TODO: call refresh function
}
在我的網頁,我有以下按鈕,用戶可以單擊刷新表:
<asp:ImageButton runat="server" ID="RefreshCot" OnClientClick="javascript:StocksListControl.TriggerPostBack(); return false;" CausesValidation="false" ImageUrl="/_layouts/images/refresh-title.png" />
這是非常糟糕的設計,每個計時器都會啓動一個新線程,並且在結束後您不清除它。如果你對每個用戶都有一些工作問題,可以考慮找一些其他的方法來做。 – Aristos
也許你可以創建這個定時器客戶端。因此,在x時間之後,您請求使用javascript更新表格。 –
我不明白服務器端計時器如何刷新表格。 ElapsedEventHandler是否曾打過電話? – Alexander