日期:2014-05-18 浏览次数:21063 次
using System.Threading; using System.Collections; using System.Diagnostics; using System; using System.ComponentModel; using System.Collections.Generic; namespace TaskThreadClass.task { public class taskThread { private int threadNums = 10; //线程列表 public List<Thread> threadlist = new List<Thread>(); //任务列表 public List<task.taskModel> tasklist = new List<task.taskModel>(); // 创建一个委托,返回类型为void,两个参数 public delegate void changeState(object sender, threadEventArgs e); // 将创建的委托和特定事件关联,在这里特定的事件为OnKeyDown public event changeState onStateChange; public taskThread() { } /// <summary> /// 前期准备,分配线程 /// </summary> /// <returns></returns> public void prepare(List<task.taskModel> tml) { this.tasklist = tml; } /// <summary> /// 得到一个等待中得任务,并分配线程(分配的是线程序号) /// </summary> /// <returns></returns> public task.taskModel getFreeTaskList(int thIndex) { Monitor.Enter(tasklist); task.taskModel rtm = null; for (int i = 0; i < tasklist.Count; i++) { if (tasklist[i].state == 0) { rtm = tasklist[i]; rtm.threadIndex = thIndex; rtm.state = 3;//1 任务完成,2任务失败,3标记为正在执行 break; } } this.onStateChange(this, new threadEventArgs(rtm)); Monitor.Exit(tasklist); return rtm; } //执行任务 private void workfunc(object v) { //线程序号 int thindex = (int)v; taskModel tm = getFreeTaskList(thindex); if (tm == null) { threadlist[thindex].Abort(); } else { this.SyncRemoteWeb(tm); } } /// <summary> /// 线程开始入口 /// </summary> public void SyncRemoteWebInit() { this.enterThreadList(); } /// <summary> /// 初始化 开启 threadNums个线程 /// </summary> /// <param name="tasksssss"></param> public void enterThreadList() { for (int i = 0; i < threadNums; i++) { getNewThread(i,true); } } public void getNewThread(int thindex) { getNewThread(thindex,false); } //创建一个新线程 执行新任务 //thindex 线程序号,新的线程占用了原来线程的位置 public void getNewThread(int thindex,bool isinit){ Thread th = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(workfunc)); th.Name = "线程" + thindex.ToString(); th.IsBackground = true; th.Start(thindex); if (isinit) { threadlist.Add(th); } else { threadlist[thindex] = th; } } //返回任务列表 public List<taskModel> getTaskList() { return this.tasklist; } /// <summary> /// 任务处理,具体方法未实现,暂时直接设置了 任务实例的 状态 /// </summary> /// <param name="tms"></param> public void SyncRemoteWeb(task.taskModel tms) { bool result = doSomeThing(); //失败 if (result == false) {