在B/S系統(tǒng)中引入定時器的技巧
發(fā)表時間:2024-02-04 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]過去的一些使用ASP技術(shù)開發(fā)的B/S系統(tǒng)中,需要系統(tǒng)定時執(zhí)行一些方法時一直都找不到好的解決方案(如果有,那一定是我淺薄了,我們討論討論)。現(xiàn)在在ASP。NET中可以使用自定義實現(xiàn)IHttpModule接口的類來加載一個定時器。public class OilIHttpModule : IHttpM...
過去的一些使用ASP技術(shù)開發(fā)的B/S系統(tǒng)中,需要系統(tǒng)定時執(zhí)行一些方法時一直都
找不到好的解決方案(如果有,那一定是我淺薄了,我們討論討論)。
現(xiàn)在在ASP。NET中可以使用自定義實現(xiàn)IHttpModule接口的類來加載一個定時器。
public class OilIHttpModule : IHttpModule
{
public static Timer analyseTimer;//分析數(shù)據(jù)的定時器
static int intLastTrialInfo_id;//最后分析的ID
static long intAnalyseInterval= 10000;//間隔的時間
public OilIHttpModule()
{ }
public String ModuleName
{
get { return "OilModule"; }
}
///初始化模型
public void Init(HttpApplication application)
{
application.BeginRequest += (new EventHandler
(this.Application_BeginRequest));
//增加處理請求時觸發(fā)的事件
if(intLastTrialInfo_id==0)
{ //獲取最后分析的
trialInfo_id intLastTrialInfo_id =
globalMethod.getLastAnalyseTrialInfo_id();
}
//判斷Timer是否存在,如果沒有則實例化
if(analyseTimer==null)
analyseTimer = new Timer(new TimerCallback(analyseData),null,
intAnalyseInterval,intAnalyseInterval);
}
private void Application_BeginRequest(Object source, EventArgs e)
{
//null
// HttpApplication application = (HttpApplication)source;
// application.Response.Write(intLastTrialInfo_id.ToString());
}
///要定時執(zhí)行的程序片段
private void analyseData(object obj)
{
///很重要,可以防止定時器被重新生成
analyseTimer.Change( System.Threading.Timeout.Infinite,
intAnalyseInterval );
// StatsInterval
int intTrialInfo_idAfterUpdate;
intTrialInfo_idAfterUpdate =
globalMethod.AnalyseTrialFromTrialInfo_id(intLastTrialInfo_id);
if(intTrialInfo_idAfterUpdate > intLastTrialInfo_id)
{
intLastTrialInfo_id = intTrialInfo_idAfterUpdate;
}
}
public void Dispose()
{
analyseTimer = null;
}