日期:2014-05-18 浏览次数:21221 次
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)
{