时间:2016-02-15 21:33 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【asp.net 计划任务管理程序实现,多线程任务加载】,下面是详细的讲解!
asp.net 计划任务管理程序实现,多线程任务加载
/// <summary>
/// 用来执行计划任务的基本对象
/// </summary>
public class ScheduledTask
{
private static readonly ScheduledTask _ScheduledTask=null;
private Timer UpdateTimer=null;
/// <summary>
/// 间隔时间,单位为毫秒
/// </summary>
private int interval=10 * 1000;
/// <summary>
/// 间隔时间,单位为毫秒
/// </summary>
public int Interval
{
get { return this.interval; }
set { this.interval=value; }
}
/// <summary>
/// 任务是否完成标志
/// </summary>
private int _IsRunning;
/// <summary>
/// 静态构造函数,保证实例的唯一性
/// </summary>
static ScheduledTask()
{
_ScheduledTask=new ScheduledTask();
}
/// <summary>
/// 任务队列
/// </summary>
private ArrayList tasks=new ArrayList();
/// <summary>
/// 任务队列
/// </summary>
public ArrayList Tasks { get { return tasks; } }
/// <summary>
/// 返回任务实例
/// </summary>
/// <returns></returns>
public static ScheduledTask Instance()
{
return _ScheduledTask;
}
/// <summary>
/// 执行任务
/// </summary>
public void Start()
{
if (UpdateTimer==null)
{
UpdateTimer=new Timer(new TimerCallback(UpdateTimerCallback), null, interval, interval);
}
}
/// <summary>
/// 任务处理
/// </summary>
/// <param name="sender"></param>
private void UpdateTimerCallback(object sender)
{
if (Interlocked.Exchange(ref _IsRunning, 1)==0)
{
try
{
//执行多个任务
foreach (IScheduledTask task in Tasks)
{
ThreadStart myThreadDelegate=new ThreadStart(task.Execute);
Thread myThread=new Thread(myThreadDelegate);
myThread.Start();
}
}
catch (Exception ex)
{
//错误处理
CreateLog(ex.Message, true);
}
finally
{
Interlocked.Exchange(ref _IsRunning, 0);
}
}
}
/// <summary>
/// 取消任务
/// </summary>
public void Stop()
{
if (UpdateTimer !=null)
{
UpdateTimer.Dispose();
UpdateTimer=null;
}
}
/// <summary>
/// 记录日志至文本文件
/// </summary>
/// <param name="message"></param>
/// <param name="iserror"></param>
public static void CreateLog(string message, bool iserror)
{
DateTime dt=DateTime.Now;
int y=dt.Year;//当前的年份
int m=dt.Month;//当前的月份
string root=HttpRuntime.AppDomainAppPath;
root +="ScheduledTaskLogs";
if (!File.Exists(root)) Directory.CreateDirectory(root);
string dir_y=root + "\\" + y.ToString();
string dir_m=dir_y + "\\" + m.ToString();
string err=iserror ? "_taskerror" : "_task";
string dirOk=dir_m + "\\" + dt.Year + dt.Month + dt.Day + err + ".txt";
//以当前年份为名创建新目录
if (!File.Exists(dir_y)) Directory.CreateDirectory(dir_y);
//以当前月份为名创建新目录
if (!File.Exists(dir_m)) Directory.CreateDirectory(dir_m);
string err1=iserror ? "错误" : "";
if (File.Exists(dirOk))
{
StreamWriter sr=new StreamWriter(dirOk, true, Encoding.Default);
lock (sr)
{
sr.WriteLine();
sr.WriteLine("--------------计划任务" + err1 + "日志-----------------------------------------------------------------------");
sr.WriteLine(err1 + "时间: " + DateTime.Now.ToString());
sr.WriteLine("详细内容: " + message);
sr.WriteLine("--------------------------------------------------------------------------------------------");
}
sr.Close();
sr.Dispose();
}
else
{
StreamWriter sr=new StreamWriter(dirOk, false, Encoding.Default);
lock (sr)
{
sr.WriteLine();
sr.WriteLine("--------------计划任务" + err1 + "日志-----------------------------------------------------------------------");
sr.WriteLine(err1 + "时间: " + DateTime.Now.ToString());
sr.WriteLine("详细内容: " + message);
sr.WriteLine("--------------------------------------------------------------------------------------------");
}
sr.Close();
sr.Dispose();
}
}
}
关于asp.net 计划任务管理程序实现,多线程任务加载的用户互动如下:
相关问题:挂在服务器的网站怎么用C#实现计划任务的功能?
答:这个可以实现,你用的是asp.net做的吧 ,这个需要在全局文件中写代码。 >>详细
相关问题:在xp系统任务管理器中哪些程序是系统必须的不能够...
答:Windows系统进程介绍 (1)[system Idle Process] 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描 述: Windows页面内存管理进程,拥有0级优先。 介 绍:该进程作为单线程运行在每个处理器上,并在系统不... >>详细
相关问题:谁能给些asp.net中b/s多线程中的应用的例子及资料
答:一、基本概念 进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。 线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等)... >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

foreach (IScheduledTask task in Tasks){}IScheduledTask 这个是在哪里的呢!!报错啊