日期:2014-05-18  浏览次数:21021 次

哪位能帮忙看看多线程的类,并帮忙修改一下
需要用多线程执行一组任务,自己对这些十分不熟悉,努力拼凑的代码应该很不正确,请有时间的兄台帮忙给修改整理下,十分感谢
另:1、要执行的任务应该很快,但我弄的代码,总要等待很长时间才执行完
  2、还有,某一个线程执行完一个任务后,怎么再取下一个任务来自动执行?

C# code

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)
            {