C#实现像讯雷,poco,flashget等下载软件中的任务列表(依次完成任务)

using System;
using System.Collections;

namespace CNEE.IF.VCY
{

    /// <summary>
    /// 任务名称结构体
    /// </summary>
    public struct taskName
    {
        //卡车
        public bool jinzha;//进闸
        public bool chuzha;//出闸
        public bool zhuangche;//装车
        public bool xieche;//卸车
        public bool zhuangchuan;//装船
        public bool xiechuan;//卸船
        //轮船
        public bool jingang;//进港
        public bool chugang;//出港
    }
    /// <summary>
    /// 任务类
    /// </summary>
    public class Task
    {
        /// <summary>
        /// 任务类
        /// </summary>
        public  Task()
        {}
        /// <summary>
        /// 任务名称(结构体)
        /// </summary>
        public taskName tn;//任务名称
        /// <summary>
        /// 任务编号
        /// </summary>
        public int TaskId;//任务编号
        /// <summary>
        /// 任务是否开始()默认否
        /// </summary>
        public bool start=false;//任务是否开始
        /// <summary>
        /// 任务是否结束(默认否)
        /// </summary>
        public bool end=false;//任务是否结束
        /// <summary>
        /// 任务是否处于等待状态(默认是)
        /// </summary>
        public bool wait=false;//任务是否处于等待状态
        /// <summary>
        /// 任务运行中(默认否)
        /// </summary>
        public bool running=false;//

    }
}
//上面是任务类,下面是实现方法
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
//using CNEE.IF.VCY.Entity3D;

namespace CNEE.IF.VCY
{
    /// <summary>
    /// taskList 的摘要说明。任务列表引擎类,实现简单任务等待机制
    /// </summary>
    public class taskListEngine
    {
        private System.Windows.Forms.Timer timer1;
        private System.ComponentModel.IContainer components;
        //
    //    public Timer taskTimer{get{return timer1;}}//计时器控制
        //
        public taskListEngine()
        {
            //
            // Windows 窗体设计器支持所必需的
            //
            InitializeComponent();

            //
            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            //
        }
        //
        public int TruckId,ContainerType,ContainerId,qu,duan,bey,hang;//卡车编号
        //
        public int VessileId,vbey,vhang;//轮船编号
        //
        public IList containersIDs;
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        //        protected override void Dispose( bool disposing )
        //        {
        //            if( disposing )
        //            {
        //                if(components != null)
        //                {
        //                    components.Dispose();
        //                }
        //            }
        //            base.Dispose( disposing );
        //        }

        #region Windows 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            //
            // timer1
            //
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            //
            // taskList
            //
            //            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            //            this.ClientSize = new System.Drawing.Size(292, 273);
            //            this.Name = "taskList";
            //            this.Text = "taskList";
           

        }
        #endregion


        //
        /// <summary>
        /// 任务动态数组
        /// </summary>
        private  IList tasklist=new ArrayList();
        public IList tasklists{get{return tasklist;}set{tasklist=value;}}
        /// <summary>
        /// 完成 或者要移除的任务动态数组
        /// </summary>
        private  IList removeTaskList=new ArrayList();

        public IList  removeTaskLists{get{return removeTaskList;}set{removeTaskList=value;}}
       
        private IList waitTask=new ArrayList();
        /// <summary>
        /// 检验任务目标,任务编号+条件(!等待,开始,运行中,!完成)的时候开始任务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
   
        private void timer1_Tick(object sender, System.EventArgs e)
        {
            foreach(Task delTask  in removeTaskList)
            {
                tasklist.Remove(delTask);
            }
            removeTaskList.Clear();
            int id=2;
            foreach(Task ta in tasklist)
            {
                id++;
                ta.TaskId=id;//重新任务编号
            }
            //下面按任务编号顺序来实现任务
            foreach(Task tn in tasklist)
            {
                //只完成一个任务
                if(tn.start&&tn.running)
                {   
                    tn.TaskId=1;//保证这个运行的是任务编号1
                    if(!tn.wait&&!tn.end)
                    {
                       
                        //任务处于等待,这个时候开始任务
                        #region
                        if(tn.tn.chugang)
                        {           
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnVehicleLeave(VessileId);
                        }
                        if(tn.tn.chuzha)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnTruckLeave(TruckId);
                        }
                        if(tn.tn.jingang)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnVehicleArrive(1,SaveOrReadYardBoxInfo.readVessileBoxInfo(""),1,out VessileId,out  containersIDs);
                        }
                        if(tn.tn.jinzha)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnTruckArrive(1,ContainerType,out TruckId,out ContainerId);
                        }
                        if(tn.tn.xieche)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnTruckUnLoad(TruckId,qu,duan,bey,hang);
                        }
                        if(tn.tn.xiechuan)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnVehicleUnLoad(VessileId,TruckId,TruckId,vbey,vhang);
                        }
                        if(tn.tn.zhuangche)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnTruckLoad(TruckId,qu,duan,bey,hang);
                        }
                        if(tn.tn.zhuangchuan)
                        {
                            tn.wait=false;
                            tn.start=true;
                            tn.running=true;
                            tn.end=false;
                            Globals.Scene.OnVehicleLoad(VessileId,TruckId,TruckId,vbey,vhang);
                        }
                        #endregion

                    }
                    if(tn.wait)
                    {
                        tn.TaskId=1000;
                        waitTask.Add(tn.wait);
                    }
                    break;
                }
                //
            }
            //等待中的任务往后移动
            foreach(Task waitTk in waitTask)
            {
                tasklist.Remove(waitTk);
            }
            foreach(Task addwaitTK in waitTask)
            {
                tasklist.Add(addwaitTK);
            }
            waitTask.Clear();
            //
        }
        //开始计时器
        public void startTimer()
        {
            timer1.Start();
        }
        //停止计时器
        public void stopTimer()
        {
            timer1.Stop();
        }
        //增加任务
        public void addTask(Task tk)
        {
            tasklist.Add(tk);
        }
        //移除任务
        public void delTask(Task tk)
        {
            removeTaskList.Add(tk);
        }
        //开始任务
        public  void startTask(Task tk)
        {
            tk.start=true;
            tk.running=true;
            tk.wait=false;
            tk.end=false;
            addTask(tk);
        }
        //结束任务
        public void endTask(int TaskId)
        {
            foreach(Task tk in tasklist)
                if(tk.TaskId==TaskId)
                {
                    tk.running=false;
                    tk.start=false;
                    tk.wait=false;
                    //
                    tk.end=true;
                }
        }
        /*************************************************************************/
        //暂停任务
        private void pouseTask(int TaskId)
        {
            foreach(Task tk in tasklist)
                if(tk.TaskId==TaskId)
                {
                    tk.running=false;
                    tk.wait=true;
                }
        }
        //继续任务
        private void ContinueTask(int TaskID)
        {
            foreach(Task tk in tasklist)
                if(tk.TaskId==TaskID)
                {
                    tk.running=true;
                    tk.wait=false;
                }
        }
    }
}

你可能感兴趣的:(timer,windows,C#,Class,任务,Components)