예제 #1
0
        }//输出
        #endregion

        public void BatchProcess(PrimalArrivalData Pad, string path)
        {
            //判断文件路径是否存在,不存在则创建文件夹
            if (!System.IO.Directory.Exists(path))
            {
                System.IO.Directory.CreateDirectory(path);//不存在就创建目录
            }
            XmlTextWriter writer1 = new XmlTextWriter(path + "SellingRecord.xml", null);
            XmlTextWriter writer2 = new XmlTextWriter(path + "ControlRecord.xml", null);

            //写入根元素
            writer1.WriteStartElement("SellingRecordData");
            writer2.WriteStartElement("ControlRecordData");

            //TODO 限制任务数量
            while (Pad.ReadNextPAL())
            {
                PrimalArrivalList pal = Pad.GetCurPAL();
                Task ta = factory.StartNew(() =>
                {
                    SellingRecordList Srlist;
                    ControlRecordList Crlist;
                    Process(pal, out Srlist, out Crlist);
                    lock (writer1)
                    {
                        Srlist.WritetoXml(writer1);
                    }
                    lock (writer2)
                    {
                        Crlist.WritetoXml(writer2);
                    }
                    //SimData.CRD.Add(Crlist);
                    //SimData.SRD.Add(Srlist);
                }, cts.Token);
                tasks.Add(ta);
                if (tasks.Count >= 128)
                {
                    Task.WaitAll(tasks.ToArray());
                    tasks.Clear();
                }
            }
            Task.WaitAll(tasks.ToArray());
            tasks.Clear();

            writer1.WriteEndElement();
            writer2.WriteEndElement();
            //将XML写入文件并且关闭XmlTextWriter
            writer1.Close();
            writer2.Close();
        }