在ASP.NET中可以利用多线程方式来达到同样的目的。
多线程
代码如下 | 复制代码 |
<%@ Page language="c#" Codebehind="WebForm54.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm54" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>WebForm54</title> <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> <meta content="C#" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> <style type="text/css"> .font { FONT-WEIGHT: normal; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: "宋体", sans-serif; BACKGROUND-COLOR: #f0f0f0; TEXT-DECORATION: none } </style> </HEAD> <body> <form id="Form1" method="post" runat="server"> <div id="div_load" runat="server"> <table width="320" height="72" border="1" bordercolor="#cccccc" cellpadding="5" cellspacing="1" class="font" style="FILTER: Alpha(opacity=80); WIDTH: 320px; HEIGHT: 72px"> <TR> <TD> <P><IMG alt="请等待" src="clocks.gif" align="left"> <BR> <asp:Label id="lab_state" runat="server"></asp:Label></P> </TD> </TR> </table> <BR> </div> <asp:Button id="btn_startwork" runat="server" Text="运行一个长时间的任务"></asp:Button><BR> <BR> <asp:Label id="lab_jg" runat="server"></asp:Label> </form> </body> </HTML> |
后台修改如下:
代码如下 | 复制代码 |
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace csdn private void Page_Load(object sender, System.EventArgs e) #region Web 窗体设计器生成的代码 } private void btn_startwork_Click(object sender, System.EventArgs e) public class work public void runwork() private void dowork() 网管管理中的耗时操作,往往又是重复性的操作。比如说生成静态页面,往往要周期性的重新生成一遍。这种任务,使用程序自动执行来完成更符合我们的要求。 在ASP.NET中使用多线程结合 代码 public interface ISchedulerWork //考核模块——考核个人通知邮件任务 } //建立一个配置对象,用来存储要定期执行的任务和执行的时间间隔。 //任务列表 public int SleepInterval { get { return sleepInterval; } } //调度配置类的构造函数 //调度类,定时执行配置对象的任务 public Scheduler(SchedulerConfiguration config) public void Start() |
在程序全局事件中:
代码
protected void Application_Start(object sender, EventArgs e)
{
SchedulerConfiguration config =
new SchedulerConfiguration(1000 * 60 * 60 * 23);
config.Jobs.Add(new .EmailSendingJob());
Scheduler scheduler = new Scheduler(config);
schedulerThread = new System.Threading.Thread(new System.Threading.ThreadStart(scheduler.Start));
schedulerThread.Start();
}
protected void Application_End(object sender, EventArgs e)
{
try
{
//程序退出时进行销毁
if (schedulerThread != null)
{
schedulerThread.Abort();
}
}
catch
{
//operation
;
}
}
方法,就能实现类似windows计划任务的功能。从而实现0干预的管理。
在WEB应用程序中使用多线程执行任务,其环境跟普通的asp.net页面有一些不同。例如页面中的HttpContext在多线程程序中就不能正常使用。想使用这个对象怎么办呢?很简单,既然是对象,传过去就行了。