由于后台任务需要是static类型方法,所以需要的参数只能通过object类型进行封装
本测试中使用一个模型来封装参数(PModel)
public string FileName { get; set; }
public int IdNum { get; set; }
public List<ManGruopModel> Gps = new List<ManGruopModel>();
包含一个文件名、以及用来标识线程的识别号,和一组数据
需要在主类中建立一个线程类型的泛型集合用来作为线程的容器
List<Thread> TList = new List<Thread>();//线程集合
用for循环向容器中注入方法实体
for (int i = 0; i < TNum; i++)
{
Thread T = new Thread(new ParameterizedThreadStart(OutPutData));//建立新线程
TList.Add(T);
}
(方法原型)
private void OutPutData(object ObjFile)
{
PModel Pm = (PModel)ObjFile;
string CurPath = Path.GetDirectoryName(Pm.FileName);//获取文件夹路径
OutPut(Pm.Gps,Pm.FileName,Pm.IdNum);
MessageBox.Show("写入完成");
TList[Pm.IdNum].Abort();//任务结束,终止线程
//thread.Abort();//终止线程
}
然后在用一个for循环向其中注入参数(其实两个for可以合并为一个)
for (int i = 0; i < TNum; i++)
{
PModel Pm = new PModel(ObjFile.FileName, MgpList[i], i);//参数传入
TList[i].Start((object)Pm);
}
需要管理某个线程的时候就可以通过遍历线程集合(线程池),通过线程的识别编号来操纵线程
TList[Pm.IdNum].Abort();//任务结束,终止线程