ASPNET內部機制實現計劃任務代碼在中要不使用其他插件的情況下只能使用定時器來檢查 並執行任務
以下講解步驟
在Globalasax 文件中作如下修改
void Application_Start(object sender EventArgs e)
{
// 在應用程序啟動時運行的代碼
//定義定時器
//表示秒的意思
SystemTimersTimer myTimer = new SystemTimersTimer()
//TaskActionSetContent 表示要調用的方法
myTimerElapsed += new SystemTimersElapsedEventHandler(TaskActionSetContent)
myTimerEnabled = true;
myTimerAutoReset = true;
}
Application_Start 只有在訪問一次之後才會觸發
void Session_End(object sender EventArgs e)
{
//下面的代碼是關鍵可解決IIS應用程序池自動回收的問題
SystemThreadingThreadSleep()
//觸發事件 寫入提示信息
TaskActionSetContent()
//這裡設置你的web地址可以隨便指向你的任意一個aspx頁面甚至不存在的頁面目的是要激發Application_Start
//使用您自己的URL
string url = ;
SystemNetHttpWebRequest myHttpWebRequest = (SystemNetHttpWebRequest)SystemNetWebRequestCreate(url)
SystemNetHttpWebResponse myHttpWebResponse = (SystemNetHttpWebResponse)myHttpWebRequestGetResponse()
SystemIOStream receiveStream = myHttpWebResponseGetResponseStream()//得到回寫的字節流
// 在會話結束時運行的代碼
// 注意 只有在 nfig 文件中的 sessionstate 模式設置為 InProc 時才會引發 Session_End 事件
// 如果會話模式設置為 StateServer
// 或 SQLServer則不會引發該事件
}
Session_End 中的方法主要是解決IIS應用程序池自動回收的問題
添加計劃任務類 TaskAction
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemWeb;
using SystemTimers;
/// <summary>
///Action 的摘要說明
/// </summary>
public static class TaskAction
{
private static string content = ;
/// <summary>
/// 輸出信息存儲的地方
/// </summary>
public static string Content
{
get { return ntent; }
set { ntent += <div> + value+</div>; }
}
/// <summary>
/// 定時器委托任務 調用的方法
/// </summary>
/// <param name=source></param>
/// <param name=e></param>
public static void SetContent(object source ElapsedEventArgs e)
{
Content = DateTimeNowToString(yyyyMMdd HH:mm:ss)
}
/// <summary>
/// 應用池回收的時候調用的方法
/// </summary>
public static void SetContent()
{
Content = END: + DateTimeNowToString(yyyyMMdd HH:mm:ss)
}
}
執行結果輸出[Defaultaspx] (此步僅僅為了觀看結果才寫的頁面)
在Defaultaspx頁面 添加
<div>
<%=TaskActionContent %>
</div>
結果輸出
From:http://tw.wingwit.com/Article/program/net/201311/11314.html